我很难理解选项并强制在Swift语言中解包。我已多次阅读本书和章节,但我无法理解。
以下两者之间是否存在差异:
totalAmountTextField?.text.toInt()
totalAmountTextField!.text.toInt()
此外,在声明IBOutlets时,为什么我总是将它作为一个可选字段,如下所示:
@IBOutlet var nameTextField :UITextField?
如果我不使用"?"最后,它会给出错误。
答案 0 :(得分:3)
totalAmountTextField?.text.toInt()
相当于
func foo() -> Int? { // give you optional Int
if let field = totalAmountTextField {
return field.text.toInt()
} else {
return nil // return nil if totalAmountTextField is nil
}
}
foo()
如果totalAmountTextField
可以是nil
totalAmountTextField!.text.toInt()
相当于
func foo() -> Int { // give you Int
if let field = totalAmountTextField {
return field.text.toInt()
} else {
crash() // crash if totalAmountTextField is nil
}
}
foo()
仅当您知道totalAmountTextField
不得为nil
答案 1 :(得分:0)
// It represents that totalAmountTextField may be nil and then stop the chain.
totalAmountTextField?.text.toInt()
// It assume that totalAmountTextField must have value, if not then caused a crash.
totalAmountTextField!.text.toInt()
您可以查看有关Optional Chaining
的Swift文档。 https://developer.apple.com/library/prerelease/mac/documentation/Swift/Conceptual/Swift_Programming_Language/OptionalChaining.html