你如何打开Swift选项?

ktz*_*ang 15 optional swift

你如何正确解开正常和隐含的期权?

这个主题似乎有些混乱,我只想提供所有方法以及它们如何有用的参考.

目前有两种创建选项的方法:

var optionalString: String?

var implicitOptionalString: String!
Run Code Online (Sandbox Code Playgroud)

打开两者的方法是什么?另外,在展开期间!和使用?期间有什么区别?

jtb*_*des 45

有许多相似之处,只有少数差异.

(常规)可选项

  • 宣言: var opt: Type?

  • 不安全地打开: let x = opt!.property // error if opt is nil

  • 安全测试存在: if opt != nil { ... someFunc(opt!) ... } // no error

  • 通过绑定安全地展开: if let x = opt { ... someFunc(x) ... } // no error

  • 安全链接: var x = opt?.property // x is also Optional, by extension

  • 安全地合并零值: var x = opt ?? nonOpt

隐含的未包装的选项

  • 宣言: var opt: Type!

  • 不安全展开(隐含): let x = opt.property // error if opt is nil

    • 通过作业不安全地展开:
      let nonOpt: Type = opt // error if opt is nil

    • 通过参数传递不安全地展开:
      func someFunc(nonOpt: Type) ... someFunc(opt) // error if opt is nil

  • 安全测试存在: if opt != nil { ... someFunc(opt) ... } // no error

  • 安全链接: var x = opt?.property // x is also Optional, by extension

  • 安全地合并零值: var x = opt ?? nonOpt


val*_*fer 7

从Beta 5开始,我们还有了新的合并运算符(??):

var a : Int?
let b : Int = a ?? 0
Run Code Online (Sandbox Code Playgroud)

如果可选项是!= nil则将其解包,否则将使用运算符右侧的值