Swift里的元组和可选类型

元组(Tuples)

元组将多个值分组为一个复合值,元祖中的值可以是任何类型,而不比彼此相通。

定义一个元组

例:

let httpStatus = (statusCode: 200, description: "ok")

读取数据:

if httpStatus.statusCode == 200 {
// ...
}

元组作为函数的返回值

使用元组作为返回值,可以返回多个返回值,而且返回的多个值的类型不受限制。

元组作为函数的返回值,在接收端需要知道元组的每个元素的类型,从而不至于取值出错。

元组的适用范围

注意:元组适用于简单的一组数据,如果数据结构比较多,太过复杂的话,不建议使用元组,这时候使用类或者结构体来定义复杂的数据结构。

可选类型(Optionals)

在Objective-C中接触过Option,Swift中的Optionals好像和OC中的不太一样。

在Swift中的Optional,适用于缺省值的情况下。

Optional和Option还不是一个东西,Swift中的可选这个概念在C和OC中是没有的。在OC中与Swift的Optional比较相近的概念是将nil作为返回值。返回nil,表示没有有效的对象,nil只适用于对象,不适用于基本的数据结构或者枚举,基本数据返回nil时,往往会返回的是0。对于这些类型,在OC中一般是返回一个特定的值,例如枚举的话我们默认返回0,定义为xxxdefault、xxxNone等。

定义可选类型

let number : int ?

在数据类型后面添加一个问号,表示这是一个可选值类型。可能是int,也可能不是。

示例分析

let result: Int? = 30
print(result)

上面的代码,编译后会报如下警告:
Expression implicitly coerced from ‘Int?’ to ‘Any’
Provide a default value to avoid this warning
Force-unwrap the value to avoid this warning
Explicitly cast to ‘Any’ with ‘as Any’ to silence this warning

原因是编译器不知道result这个值到底是什么,因为它是一个可选类型。

系统给提供了三个处理警告的办法,点击fix即可

  1. 添加一个默认值
let result: Int? = 10
print(result ?? 0)

如果有值则是该值,如果没值,result是0。

  1. unwrap解包装
let result: Int? = 10
print(result!)

这种情况需要注意,当result被赋值为nil的时候,会闪退。

这里有一个问题就是 感叹号 在这里的作用。

let result: Int? = 10
print(result as Any)

这种做法个人感觉是比较好的,当result有值时就是被赋予的值,如果没值时候就是nil,也不会闪退。

Optional中使用nil

var serverResponseCode: Int? = 404

// serverResponseCode contains an actual Int value of 404

serverResponseCode = nil

// serverResponseCode now contains no value

注意:
Swift中的nil与OC中的nil不一样。OC中nil是指向不存在的对象的指针。在Swift中nil不是指针,是缺少某种类型的值,可以将任何类型的Optionals这是为nil,而不仅仅是对象类型。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章