AP计算机科学A(APcomputer science A)复习备考攻略视频教程
43764 人在学
在学习Swift基础的另一篇文章中,我们简单的对Swift中的可选(Optionals)类型进行了了解。也对可选绑定进行了概念的描述。但是简单的描述对于想要掌握的朋友用处不大。所以本文就Swift中的可选类型进行详细并且用代码帮助理解。
Swift中的可选类型,一般使用于处理值确实的情况下。可选表示为“有值”和“没有值”。而Optional是一个含有两种情况的枚举,None和Some(T)分别表示有值和没有值。在Swift中定义使用后缀?作为命名可选(Optionals)类型的简写。下面我们看看两种不同的声明:
var Score: Int? //注意,类型和?之间是没有空格的
var Score: Optional
虽然是两种不同的声明,但是它们是相等的。在这两种情况中,score 都是一个可选整数类型。在Swift中任何类型都可以被声明为可选类型(你也可以隐式转换)。可当你声明一个可选类型的时候,你要确保给?一个合适的范围,有必要的时候可以使用括号确保。打个比方:如果你在声明可选整数数组的时候写成int[]? 就会报错,正确的写法应该是(int[]?)。还有要注意的是,如果你在声明一个可选变量或者可选属性的时候没有提供一个初始值,系统会默认为nil(空值)。
可选项遵照LogicValue协议,因此可以出现在布尔环境中。在这种情况下,如果可选类型T?包含类型为T的任何值(也就是说它的值是Optional.Some(T)),这个可选类型等于true,反之为false。
你可以使用后缀操作符!对一个可选类型进行访问,但是前提是这个可选类型实例中必须含有一个值,不然会在运行的时候出错。如下:
Score = 50
Score! // 50
下面我们看一段关于可选类型中nil 的应用:
执行结果为:字符串为 nil
你可以看到的是,当你在使用可选链接和可选绑定性执行可选表达式上的操作的时候。如果值为nil ,任何的操作都不会被执行,但是也不会报错。
可选类型类似于Objective-C中指针的nil值,但是nil只对类(class)有用,而可选类型对所有的类型都可用,并且更安全。
可选绑定(optional binding)
使用可选绑定可以用于判断可选类型中是够包含有值,如果判断其中包含有值就将值赋给一个临时变量或者常量。
可选绑定也可以用在if和while语句之中,在语句中进行判断并将值赋给临时变量或者常量。
if 中的可选绑定的语法:
完整的if 代码实例:
强制解析
在上文有简单的说到,当你确定这个可选类型中确实包含一个值之后,你可以在可选名字的后面使用一个!来获取这个值。简单的说这个感叹号就是表示,我知道这个可选中有值,请你一定要使用它。这就被称为强制解析。
普通的实例:
结果是:Optional("Hello, Swift!")
使用!:
结果是:Hello, Swift!
但是这种方法你在使用一次强制解析就要用一次!,有时候可能会忘记,这里还有一个方法叫做自动解析。
自动解析有什么用呢?你可以在声明可选变量时使用感叹号(!)替换问号(?)。这样可选变量在使用时就不需要再加一个感叹号(!)来获取值,它会自动解析。看看代码来帮助理解:
结果:Hello,Swift!
小结一下,可选类型的本质其实就是一个枚举,None 没有值或者Some 有值。可选绑定可以方便的通过判断将值赋给一个临时变量或者常量。强制解析可以直接在可选名字的后面使用一个!来获取这个值。自动解析就是在声明可选类型时就在后面加上!,这样使用的时候就会自动解析。如果对Swift有兴趣的朋友可以在本网站搜索Swift或者直接点击文中的链接进行学习。