繁体   English   中英

Swift Optionals和强制展开

[英]Swift Optionals and Forced Unwrapping

我很难理解可选内容,并在Swift语言中强制展开。 我已经读过几次书和章节,但我听不懂。

以下两个之间是否有区别:

totalAmountTextField?.text.toInt()

totalAmountTextField!.text.toInt()

另外,在声明IBOutlets时,为什么总是将其设为这样的可选字段:

@IBOutlet var nameTextField :UITextField?

如果我不使用“?” 最后给出错误。

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才应使用它

// 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM