Swift Optionals和Forced Unwrapping

时间:2014-08-18 03:42:10

标签: swift

我很难理解选项并强制在Swift语言中解包。我已多次阅读本书和章节,但我无法理解。

以下两者之间是否存在差异:

totalAmountTextField?.text.toInt()

totalAmountTextField!.text.toInt()

此外,在声明IBOutlets时,为什么我总是将它作为一个可选字段,如下所示:

@IBOutlet var nameTextField :UITextField?

如果我不使用"?"最后,它会给出错误。

2 个答案:

答案 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

相关问题