美文网首页
Swift新引入的类型

Swift新引入的类型

作者: 风往北吹_ | 来源:发表于2016-02-02 17:37 被阅读38次

    元组(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新引入的类型

          本文链接:https://www.haomeiwen.com/subject/zuzskttx.html