Swift新引入的类型

【Swift新引入的类型】元组(Tuples):
定义:元组(tuples)把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型。

用途:可以把多个值组成一个复合值,作为函数的参数或返回值使用时,非常方便。 用法: 组合: let http404Error = (404, "Not Found") print(http404Error) // http404Error的类型是:(Int, String),值是(404, "Not Found") 分解: let (statusCode, statusMessage) = http404Error print("statusCode = \(statusCode), statusMessage = \(statusMessage)")其他: 如果只需要一分部元组值,分解时可以把忽略的部分用下划线(_)标记: let (justTheStatusCode, _) = http404Error print("The status code is \(justTheStatusCode)") // 输出 "The status code is 404" 可以通过下标来访问元组中的单个元素,下标从0开始: print("The status code is \(http404Error.0)") // 输出 "The status code is 404" print("The status message is \(http404Error.1)") // 输出 "The status message is Not Found" 你可以在定义元组的时候给单个元素命名: let http200Status = (statusCode: 200, description: "OK") 给元组中的元素命名后,你可以通过名字来获取这些元素的值: print("The status code is \(http200Status.statusCode)") // 输出 "The status code is 200" print("The status message is \(http200Status.description)") // 输出 "The status message is OK"

可选类型(Optionals):
用途:用于处理值可能缺失的情况。
可选表示:有值,等于x 或 没有值
nil : 可以给可选变量赋值为nil来表示它没有值: 例: var serviceResponseCode: Int? = 404// 打印结果是一个可选的Int值:404 serverResponseCode = nil // 打印结果为nil,即不包含值 注意: nil不能用于非可选的常量和变量。如果代码中由于常量或变量需要处理值缺失的情况,请把它们声明成对应的可选类型如果声明了一个可选常量或变量但是没有赋值,它们会自动被设置为nil: 例: var surveyAnswer: String?// 打印结果为nil, 即被自动设置为nil var numberAnswer: Int?// 打印结果同上 注意: Swift和Objective-C的nil并不一样。 在Objective-C中,nil指向一个不存在对象的指针。 在Swift中,nil不是指针,是一个确定的值,用来表示值确实(任何类型的可选状态都可以被设置为nil),不只是对象if语句以及强制解析 可选值得强制解析:当确定可选类型确实包含值之后,在可选值的名字后面加一个感叹号(!) 来获取值,这被称为可选值得强制解析 例: let possibleNumber = "123" let convertedNumber = Int(possibleNumber) // convertedNumber 被推测为类型 "Int?", 或者类型 "optional Int" if convertedNumber != nil { print("convertedNumber contains some integer value of \(convertedNumber!).") //不等于nil说明有值,强制解析 } 注意:使用!来获取一个不存在的可选值会导致运行时错误。因此,在使用!强制解析值之前,一定要确定可选包含一个非nil得值可选绑定 if let actualNumber = Int(possibleNumber) { print("\'\(possibleNumber)\' has an integer value of \(actualNumber)") } else { print("\'\(possibleNumber)\' could not be converted to an integer") } 理解: 如果Int(possibleNumber)返回的可选Int包含一个值,创建一个叫做actualNumber的心常量并将可选值赋给它 用法: 可以在可选绑定中使用常量或变量,如果想在第一分支中操作actualNumber,可改成变量 if var actualNumber1 = Int(possibleNumber) { actualNumber1 = 100 print("\'\(possibleNumber)\' has an integer value of \(actualNumber1)") } else { print("\'\(possibleNumber)\' could not be converted to an integer") } 可以包含多个可选绑定在if语句中,并使用where子句做布尔值判断 if let firstNumber = Int("4"), secondNumber = Int("42") where firstNumber < secondNumber { print("\(firstNumber) < \(secondNumber)") } // prints "4 < 42"隐式解析可选类型 用途: 有时候在程序中,第一次被赋值之后,可以确定一个可选类型总会有值。这种类型的可选状态被定义为隐式解析可选类型。(把想要用做可选类型的后面的问号改成感叹号,来声明一个隐式解析可选类型) 例: let possibleString: String? = "An optional string." let forcedString: String = possibleString! //每次都需要感叹号(!)获取值let assumedString: String! = "An implicitly unwrapped optional string." let implicitString: String = assumedString // 不需要感叹号仍然可以把隐式解析可选类型当做普通可选类型来判断是否包含值: if (possibleString != nil) { print(possibleString) }也可以在可选绑定中使用隐式解析可选类型来检查并解析它的值: if let definiteString = assumedString { print(definiteString) }

    推荐阅读