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)
        }

你可能感兴趣的:(Swift新引入的类型)