在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
第一章主要学习了Swift的一些基本内容,变量、常量、数据类型以及控制流。而这一章讲的是相对“高级”一点的基础知识,当然也还是基础知识啦。 可选类型(Optionals)根据之前的知识,当我们需要声明一个变量的时候,我们可以这么做:
这样,我们在声明的时候同时指定了初值,但是,如果在有些情况下,你声明变量的时候是不知道初值的,那么应该怎么办呢?从直观上来讲,我们会这么做:
实际上,如果我们这么做,编译器会报出 Variable 'str' used before being initialized 的错误, 在Swift当中,不允许声明一个变量而不赋值,这能防止我们在没有初始化的情况下使用 那么,如果这样呢?
结果,这次报出的错误是 Type ‘string’ does not conform to protocol ‘NilLiteralConvertible’。 事实上,在Swift当中,如果一个变量的值有可能为空,则我们需要指定它的类型为可选类型。 可选类型的声明当我们需要声明一个可选类型的变量,我们可以这么做:
只需在变量类型的后面加一个问号就可以了。在没有赋初值的情况下, 如果我们把声明改成如下:
可以在右边的面板中看到输出结果为 在这种情况下,如果我们要使用
当str的值不为 强制解包(Forced unwrapping)当我们确定一个可选变量的值不为
如果对一个值为
隐式解包(Implict unwrapping)隐式解包功能可以让我们使用可选类型的时候不需要手动进行解包。要使用一个隐式解包的变量,我们需要在声明变量的时候不是使用问号,而是使用感叹号
之后,我们可以像使用普通变量一样来使用
虽然,我们使用隐式解包变量的语法跟普通变量是一样的,但是实际是上编译器自己帮我们进行了解包,如果直接使用了一个值为 可选链(Optional chaining)使用可选链可以方便地获取一个可选变量的值,而不需要使用
第二行的问号,是可选链的语法。在运行的时候,编译器会先检查 集合类型任何一门语言里面都必然会包括集合类型。比如 数组数组是一组相同类型变量的集合,可以使用方括号来声明:
在这里,编译器会进行类型推断,因为这个数组为 可以使用下标来获取特定位置的元素:
也可以方便地向数组中添加元素:
或者直接添加一组范围内的元素:
我们也可以显式地指定数组所能存储的类型:
在Swift当中有一个 字典数组存储的是一组类型的数据,而字典则存储的是一组键值对。
这行代码声明了一个包含两个键值对的字典,键和值之间使用分号隔开,而每个键值对之间使用逗号来分隔。 与数组类似,我们也可以显示声明字典的类型:
可以使用方括号配合键来获得特定的值:
也可以对值进行更新:
我们可以将某个值设为
上面的代码执行后,则字典里又只包含两个键值对。 要注意到,当我们使用键来获取某个值的时候,返回的是一个可选值,因为我们要取的值有可能不包含在字典当中。
引用和拷贝在Swift当中,当我们对数组或者字典进行赋值,或者在函数进行传参的时候,编译器会当整个数组或字典进行拷贝,而并非只传递了引用,这与其它很多语言有很大的不同。
运行之后可以看到,我们修改了字典B的元素,而字典A不会受到影响,因此可以证明在Swift当中字典确实是按值拷贝的。 对数组进行同样的操作
同样的,对数组B进行的操作不会影响到数组A。 常量集合如果我们想使声明的集合类型为不可变的,只需要使用
这样定义出来的数组将是不可变的,即不能修改元素的内容,也不能对数组进行增加和删除。 小结这章主要讲了Swift当中的可选类型,可选类型是Swift当中比较独特的类型,也是用来保证Swift类型安全的重要类型,因此用到的地方会很多,有必要好好掌握。同时还介绍了Swift当中的两种集合类型,数组和字典,使用方法与其它语言也是大同小异的,因此也比较容易上手。 |
请发表评论