【问题标题】:Swift - optional String vs. implicitly unwrapped optional String [duplicate]Swift - 可选字符串与隐式展开的可选字符串 [重复]
【发布时间】:2016-04-24 17:38:07
【问题描述】:

我正在阅读 Apple 出版的 Swift 书籍。根据书:

var possibleString: String? = "an optional string"
var assumedString: String! = "an implicitly unwrapped optional string"

这两者有什么区别?什么时候应该使用每一个?事实证明两者都可以设置为nil

【问题讨论】:

  • 尝试在代码中使用变量(两者都应该具有 nil 值),例如打印它们,在第一种情况下它不会崩溃,因为它没有被隐式解包,其次它会因为它正在尝试解开一个 nil 值

标签: string swift optional implicit


【解决方案1】:

当你不能保证访问参数时会有一个字符串值时,使用第一个。 当您在访问时 100% 确定此参数中有字符串值时使用第二个:例如,在将其发送到服务器端验证之前解析用户名字段,当您禁用登录按钮时,如果此字段为空的。所以这意味着如果登录按钮被按下,你在文本字段中有一个字符串值,所以它保证不为零。

附言在 swift 2 中,如果您的值以后不会更改,请使用 let 而不是 var...

【讨论】:

    【解决方案2】:

    在代码中引入另一个变量:

    var string: String
    

    然后观察:

    string = possibleString
    

    上面的代码将失败:

    Value of optional type 'String?' not unwrapped, did you mean to use '!' or '?'?
    

    但是:

    string = assumedString
    

    有效。

    assumedString 会自动或隐式为您解包。在您确定可选项包含值的情况下,使用隐式展开的可选项。

    【讨论】:

      【解决方案3】:

      来自 Apples Swift 编程指南:

      1. var possibleString:字符串? = "一个可选字符串"

      可选的是 value 要么包含一个值,要么包含一个 nil 值,以指示该值丢失。

      使用时必须同时使用 if 和 let, as

      var newString : String
      if let possibleString = possibleString {
      newString = possibleString
      }
      

      2。 var 假定字符串:字符串! = "一个隐式解包的可选字符串"

      隐式展开的可选项类似于可选项类型,但我们可以在每次访问它时像使用非可选值一样使用它。

      这种情况下可以直接作为

      var newString : String
      newString = possibleString
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-28
        • 1970-01-01
        • 1970-01-01
        • 2015-10-30
        • 2016-10-29
        • 2021-10-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多