一尘不染

您如何解开Swift可选项?

swift

您如何正确地拆开普通选项和隐式选项?

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

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

var optionalString: String?

var implicitOptionalString: String!

有两种解开包装的方式吗?另外,使用!?展开过程之间有什么区别?


阅读 246

收藏
2020-07-07

共1个答案

一尘不染

有很多相似之处,只有少数区别。

(常规)可选

  • 宣言: 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

2020-07-07