这一部分,主要讲Swift中创新的可选型(optionals)

一、概要

可选型是Swift创新的一种新的类型,首先看一下可选型的应用场景:

var errorCode : Int = 404

这时候errorCode的值是404,表示此时的错误状态码是404,当产生一种错误的时候就会获得其对应的errorCode,

但是如果没有错误那应该怎么办呢?

在C/C++和Java中我们会给errorCode赋值为0或者是null(其实null也就是0),但是我们怎么能够保证0不是一种错误的状态码呢?

Swift为了解决这一问题,提供了可选型(optionals)当这个值不存在的时候,我们用nil表示,

需要注意的是:

var errorCode : Int = 404

errorCode = nil

这是错误的,因为nil是一种特殊的类型,是不可以赋值给int型的变量的。

正确的操作是:

var errorCode : Int? = 404

errorCode = nil

添加一个?就对了,这时候Int?表示的是整型的可选型

需要注意的是,可选型不可以赋值给不可选型的变量。

二、可选型的解包

在使用可选型的时候,需要进行解包操作,有两种解包(unwrap)方式:

1)强制解包

var errorCode : Int? = 404

print(“The errorCode is”+errorCode!)

这种解包方式需要开发者保证errorCode的值不是nil,否则就会报错。

2)if-let解包

var errorCode : Int? = 404

if let errorCode = errorCode {

print(“The errorCode is”+errorCode)

}

建议采用这种方式,当出现多个量需要解包的时候:

if let errorCode = errorCode,

errorMessage = errorMessage{

}

三、optional Chaining

先看看应用环境:

var errorMessage : String? = “Not Found”

if let errorMessage = errorMessage{

errorMessage.uppercaseString

}

这种方式是错的,因为errorMessage是String而不是String?

如果要使用String的uppercaseString方法的话可以这样做:

errorMessage?.uppercaseString

或者

errorMessage!.uppercaseString(确定不是nil)

这里的返回类型也是一个可选型

如果errorMessage!.uppercaseString返回,再进行操作就类似一条chain。

四、nil coalesce

我们建议在声明变量的时候就给变量赋初值,但有时候,我们希望通过后面的逻辑判断之后再对变量进行赋值

这时候我们可以这样做:

var errorMessage : String? = nil

let message = errorMessage == nil ? “Not Found” : errorMessage

当然可以通过nil coalesce方式

var errorMessage : String? = nil

let message = errorMessage??“Not Found”

五、元组的可选型

var error1 : (errorCode : Int?, errorMessage : String?) = (404, “Not Found”)

其中errorCode和errorMessage是可选型,但是error1不是可选型

因此errorCode和errorMessage可以是nil,而error1不可以

var error1 : (errorCode : Int?, errorMessage : String?)? = (404, “Not Found”)

errorCode和errorMessage,error1就都是可选型了

六、隐式可选型

主要应用在函数的构造函数中

var errorMessage : String! = nil

!进行使用的时候可以不进行解包操作,但是必须确保不为nil

在使用的时候,构造函数可以这样定义,但是在后面会先赋值,再使用。

swft 语言 java_Swift语言中与C/C++和Java不同的语法(二)相关推荐

  1. swft 语言 java_Swift语言中与C/C++和Java不同的语法(一)

    ---恢复内容开始--- Swift作为苹果官方推出的IOS开发的推荐语言,在过去的几年间受到了越来越广泛的关注,其实编程的人都知道,不同的编程语言大同小异,掌握一门新的语言关键是了解它与其它语言不同 ...

  2. 8位alu运算器(vhdl语言)_C语言中signed char类型,能表示-128到127,为什么负数多一位?...

    初学者在学习C语言,谈到不同数据类型时,一般都能理解 unsigned 和 signed 的区别,无非就是有无符号而已.但是对于 signed 数据类型的数据范围,初学者却常常会感到迷惑. 对于 si ...

  3. 函数用法r语言_R语言中的apply函数族

    前言 apply函数族是R语言中数据处理的一组核心函数,通过使用apply函数,我们可以实现对数据的循环.分组.过滤.类型控制等操作.但是,由于在R语言中apply函数与其他语言循环体的处理思路是完全 ...

  4. table是什么函数c语言,c语言中table的用法

    c语言中table的用法 c语言中table的用法的用法如下:1 说明1.1 RECORD定义记录数据类型. 它类似于C语言中的结构数据类型(STRUCTURE),PL/SQL提供了将几个相关的.分离 ...

  5. c语言memcopy_C语言中memcpy 函数的用法详解

    C语言中memcpy 函数的用法详解 memcpy(内存拷贝函数) c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址 ...

  6. map函数作用c语言,c语言中map的用法:map基本用法

    c++中map容器提供一个键值对容器,那么你知道map的用法有哪些吗,下面秋天网 Qiutian.ZqNF.Com小编就跟你们详细介绍下c语言中map的用法,希望对你们有用. c语言中map的用法:m ...

  7. sleep函数的作用c语言,C语言中的sleep函数是什么意思【详细介绍】

    计算机知识:C语言中的Slee函数 Sleep函数简介: 函数名: sleep 功 能: 执行挂起一段时间 用 法: unsigned sleep(unsigned milliseconds); 在V ...

  8. div c语言,c语言中的div的用法是什么?

    c语言中的div的用法: 函数名: div 功 能: 将两个整数相除, 返回商和余数 用 法: div_t (int number, int denom); 程序例: # include #inclu ...

  9. python语言str_python语言中的str是什么意思

    python语言中的str是什么意思 发布时间:2020-07-15 10:35:17 来源:亿速云 阅读:472 作者:Leah 本篇文章给大家分享的是有关python语言中的str是什么意思,小编 ...

最新文章

  1. 详解CPU漏洞对机器学习的影响:几乎所有卷积层都受影响,QR分解降速37%
  2. 黑客暗网叫卖Zoom账号密码,1分钱能买71个,加密大佬教袁征做人,17年前开源软件现在又火了...
  3. nosql ( redis 跟 memcache )的区别
  4. Extjs09 双击事件
  5. ubuntu环境下如何解决svn提交出现can‘t check path ‘/home/...‘
  6. phpmyadmin4.8.1远程文件包含漏洞
  7. git遇到的错误集锦及解决方法
  8. 【图像去噪】基于马尔可夫随机场实现图像去噪附matlab代码
  9. origin与matlab拟合的不同,Origin自定义模拟与matlab中cftool工具箱拟合结果比较 - 计算模拟 - 小木虫 - 学术 科研 互动社区...
  10. 【OpenCV】 300行写出全能扫描王
  11. “强方杯“首届北京高校概率篮球棋邀请赛收枰
  12. 密度图与等高线图——Note_5
  13. EXCEL单元格换行操作
  14. linux下proc文件夹详解
  15. JavaScript中if嵌套
  16. 汽车CAN通信基础知识-Java之Socket通信实战
  17. 不干胶标签的印刷工艺
  18. 中小企业数字化转型的痛点分析
  19. 下载的视频花屏怎么办?其实很简单!!!
  20. 杭州2.0之新挑战、新梦想

热门文章

  1. Windows11管理开机启动项
  2. ArcGIS学习记录—SHP文件转换为KML KMZ数据,并显示面要素相应的标注
  3. vmprotect的加壳的授权模式,锁定硬件码
  4. 怎样网上注册自己的商标
  5. 我们成功给OpenCV添加了三维点云降采样算法!
  6. js对象排序,根据对象的key来排序,按ASCII码排序
  7. MySQL Server 连接工具
  8. 创建(导入)PCB封装库
  9. Jsp网上书店系统源码
  10. 内存检测 - instrument介绍