Swift - 可选String与隐式解包的可选String

时间:2016-01-19 09:53:44

标签: string swift optional implicit

我正在阅读Apple发布的Swift书。根据这本书:

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

这两者之间的区别是什么?什么时候应该使用?事实证明,两者甚至可以设置为nil

3 个答案:

答案 0 :(得分:1)

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

P.S。在swift 2中,如果以后不再更改您的值,请使用let而不是var ...

答案 1 :(得分:1)

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

var string: String

然后观察:

string = possibleString

上面的代码将失败:

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

然而:

string = assumedString

作品。

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

答案 2 :(得分:0)

来自Apples Swift编程指南:

  1. var possibleString:String? =“可选字符串”
  2. 可选值是包含值或nil值,表示缺少该值。

    使用时你必须使用if和let,如

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

    2。     var assumeString:String! =“隐式解包的可选字符串”

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

    在这种情况下,您可以直接将其用作

    var newString : String
    newString = possibleString