我正在阅读Apple发布的Swift书。根据这本书:
var possibleString: String? = "an optional string"
var assumedString: String! = "an implicitly unwrapped optional string"
这两者之间的区别是什么?什么时候应该使用?事实证明,两者甚至可以设置为nil
。
答案 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编程指南:
可选值是包含值或nil值,表示缺少该值。
使用时你必须使用if和let,如
var newString : String
if let possibleString = possibleString {
newString = possibleString
}
2。 var assumeString:String! =“隐式解包的可选字符串”
隐式展开的可选项类似于可选类型,但每次访问它时我们都可以像非可选值一样使用它。
在这种情况下,您可以直接将其用作
var newString : String
newString = possibleString