元组(tuples)是把多个值组合成一个复合值。
元组内的值可以使任意类型,并不要求是相同类型。
比如(404, "Not Found") ,这是一个描述 HTTP 状态码(HTTP status code)的元组,
Http 状态码是请求web 服务器时返回的一个值。
如果你请求的页面不存在,就会返回 404
let http404Error = (404,"Not Found")
(404, "Not Found") 是将一个 Int 类型值和一个 String 类型值组合在一起
表示 HTTP 状态码的两个部分:数字和描述。
它可以被描述为 “一个(Int,String)类型的元组”。
元组可以包含任何类型,类型的顺序也是随意的。
比如,你可以创建 (Int, Int, Int) 或者 (String, Bool) 元组,或者其他任何你想要的元组。
可以将一个元组的内容分解成单独的常量或变量,然后就可以正常访问了
let (statusCode, statusMessage) = http404Error
print(statusCode)
print(statusMessage)
如果你只需要一部分元组的值,忽略的部分用下划线来标记_
let(theStatusCode,_) = http404Error
print(theStatusCode)
还可以通过索引访问元组中的各个元素,索引数字从0开始
print("statusCode==\(http404Error.0)")
还可以给元组的各个元素赋值 一下两种方式都一样
let http200Status = (statusCode:200,description:"yes,it is ok")
let http200Status = (statusCode:200,statusMessage:"yes,it is ok")
print(http200Status)
也可以用.元素名来访问这些元素
print("http200Status的status==\(http200Status.statusCode)")
元组作为函数的返回值时特别有用。
一个试图访问网页的函数可能会返回一个(Int, String) 元组来描述是否成功。
和只能返回一个值比起来,返回一个包含两个不同类型值的元组让函数更有用。
元组在临时组织值的时候很有用,但是并不适合创建复杂的数据结构。
如果你的数据结构并不是临时使用,请使用类或者结构体
一个变量在未初始化之前是不能使用的,除非使用可空类型
使用可选(optionals)来处理可能缺失值的情况。
一个可选(optionals)表示:
有值,等于 x
或者,没有值
C 和 Objective-C 中没有可选这个概念。
Objective-C 中的一个特性与可选比较类似:一个方法要么返回一个对象,要么返回 nil,
nil 表示“缺少一个合法的对象”。
例如:Swift 的 String 类型有一个方法 toInt ,用于将一个 String 值转换成一个 Int 值。
然而,不是所有的字符串都可以转换成一个整数。
字符串 "123" 可以被转换成数字123,但是"hello, world"是不行的。
下面的例子调用 Int() 方法试图将一个 String 转换成 Int:
let possibleNumber:String = "123"
let possibleNumber:String = "hello"
只有可空类型才能和nil进行比较,否则会报错
如下,会报错
if possibleNumber == nil {
}
let convertedNumber = Int(possibleNumber)
let convertedNumber :Int? = Int(possibleNumber)
但是下面的不会报错
if convertedNumber == nil {
}
print(convertedNumber)
当是"123"时打印的是Optional(123) 当为"hello"时 为nil
因为Int()方法可能失败,所以它返回一个可选的(optional)Int,而不是一个Int。
一个可选的 Int 表示为: Int? 。
问号表示是可选的,也就是说可能包含 Int 值也可能不包含。
只能是 Int 或者什么都没有。不能包含其他值,比如 Bool值或者 String 值
可空类型不是一种类型,他是普通类型(非可空类型)加上nil的结合。