Swift 可选(Optionals)类型

1,225 阅读2分钟
  • Swift 的可选(Optional)类型,用于处理值缺失的情况。
  • Optional 是一个含有两种情况的枚举,NoneSome(T) ,用来表示可能有或可能没有值。
  • Swfit语言定义后缀 作为命名类型 Optional 的简写,换句话说,以下两种声明是相等的:
    var optionalInteger: Int?
    var optionalInteger: Optional<Int>
  • 任何类型都可以明确声明为,或者隐式转换可选类型。
  • 当声明一个可选类型的时候,要确保用括号给 操作符一个合适的范围。例如,声明可选整数数组,应该写成 (Int[])? ;写成 Int[]? 会报错。
  • 当你声明一个可选变量或者可选属性的时候,没有提供初始值,它的值会默认为 nil
  • 可选类型类似于Objective-C中指针的nil,但是nil只对类(class)有用,而可选类型对所有的类型都可用,并且更安全

强制解析(forced unwrapping)

  • 如果一个可选类型的实例包含一个值,可以用后缀操作符 ! 来访问这个值。
  • 使用强制解析获取一个不存在的可选值会导致运行时错误。
        var myString:String?
        myString = "Hello, Swift!"
        if myString != nil {
            // 强制解析
            print( myString! )
        }else{
            print("myString 值为 nil")
        }
        
        以上程序执行结果为:
        Hello, Swift!

自动解析

  • 在声明可选变量时使用感叹号 ! 替换问号 ?
  • 这样可选变量在使用时就不需要再加一个感叹号 ! 来获取值,它会自动解析。
        var myString : String!
        myString = "Hello, Swift!"
        if myString != nil {
            print(myString)
        } else {
            print("myString 值为 nil")
        }
        
        以上程序执行结果为:
        Hello, Swift!

可选绑定

使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用在 ifwhile 语句中来对可选类型的值进行判断并把值赋给一个常量或者变量。

        var myString : String?
        myString = "hello world"
        if let yourString = myString {
            print("你的字符串值为 - \(yourString)")
        }else{
            print("你的字符串没有值")
        }
        
        以上程序执行结果为:
        你的字符串值为 - hello world!