swift 叹号(!)和问号(?)

  • Optional:

    • 概念: 用于表示一种值可能为空的对象类型。一个 Optional 对象表示了两种可能性:要么对象有值,你可以通过 unwrap 去获取到这个值;要么对象里面没有任何东西
    • unwrap(解包):在对象后加 “?” 或 “!” 称为将对象 “unwrap”,可以获取到 Optional 里面的关联值
  • nil区别

    • Swift:在 Swift 中,nil 不是一个指针,它是一个带有特定类型的表示数值缺失的值,任何类型的 Optional 都可以设置为 nil 而不只是对象类型。
      var str: String?
      // str == nil
    • Objective-C:nil 是指向一个不存在对象的指针
  • 强制解包

    • 使用!进行解包:一旦你确定可选中包含值,可以使用后缀操作符!来强制拆包(force unwrap)访问这个值,感叹号的意思就是说“我知道这个可选项里边有值,展开吧。”这就是所谓的可选值的强制展开。 !!!:使用! 来获取一个不存在的可选值会导致carsh,在使用!强制展开之前必须确保可选项中包含一个非 nil 的值。
  • 小结:

    • ?
      • 声明时添加?,告诉编译器这个是Optional的,如果声明时没有手动初始化,就自动初始化为nil
        • 在对变量值操作前添加?,判断如果变量时nil,则不响应后面的方法
    • !
      * 声明时添加!,告诉编译器这个不是Optional的,并且之后对该变量操作的时候,都隐式的在操作前添加!
      • 在对变量操作前添加!,表示默认为非nil,直接解包进行处理