Ios 展开标签并转换为int()

Ios 展开标签并转换为int(),ios,swift,optional,Ios,Swift,Optional,我在这里尝试做这个教程。我是一个完全的初学者,这将是我第一次使用iOS应用程序: 这是我的密码: 导入UIKit class ViewController: UIViewController { var isTypingNumber = false var firstNumber = 0 var secondNumber = 0 var operation = "" override func viewDidLoad() { super

我在这里尝试做这个教程。我是一个完全的初学者,这将是我第一次使用iOS应用程序:

这是我的密码:

导入UIKit

class ViewController: UIViewController {

    var isTypingNumber = false
    var firstNumber = 0
    var secondNumber = 0
    var operation = ""

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    @IBOutlet weak var calculatorDisplay: UILabel!

    @IBAction func numberTapped(sender: AnyObject) {

        var number = sender.currentTitle

        if isTypingNumber {
            calculatorDisplay.text = calculatorDisplay.text! + number!!
        } else {
            calculatorDisplay.text = number

            isTypingNumber = true
        }
    }


    @IBAction func calculationTapped(sender: AnyObject) {

        isTypingNumber = false

        firstNumber = calculatorDisplay.text?.toInt()!

        operation = sender.currentTitle!!
    }

    @IBAction func equalsTapped(sender: AnyObject) {
        isTypingNumber = false
        var result = 0

        secondNumber = calculatorDisplay.text?.toInt()!!

        if operation == "+" {
            result = firstNumber + secondNumber
        } else if operation == "-" {
            result = firstNumber - secondNumber
        }

        calculatorDisplay.text = "\(result)"

    }
}
下面是正在发生的事情。我得到一个错误,表示可选类型Int的值?没有打开包装,你是想用它吗!还是

它提出通过添加感叹号来修复它,然后说这是错误的,并提出删除感叹号。请参见屏幕截图:


我基本上了解optionals的概念以及如何使用它们,但这让我感到困惑。

这令人困惑。问题是calculatorDisplay.text?.toInt!是否使用可选链接是由于以下原因?课文之后。可选链的结果始终是可选值,即使通过添加!打开链中的最后一项也是如此

这个!结束时:

calculatorDisplay.text?.toInt()!
只打开整数?这是由toInt返回的。为什么toInt返回可选的Int?因为字符串可能无法转换为Int,所以在这种情况下,toInt返回nil。例如,two.toInt将返回nil

要展开结果,可以使用括号将整个可选链分组,以便!将打开整个链:

secondNumber = (calculatorDisplay.text?.toInt())!
或通过使用!强制展开文本来删除可选链接:

但如果文本为nil或字符串无法转换为Int,则这些将崩溃。更好的方法是使用可选绑定:

另一种选择是使用nil合并操作符??。如果要在文本为nil时使用默认值,或者如果文本未成功转换为Int,则可以执行以下操作:

let secondNumber = calculatorDisplay.text?.toInt() ?? 0

如果文本不是nil并且转换成功,这将安全地展开toInt创建的可选文件。否则,0将被分配给secondNumber。无论哪种情况,secondNumber都是Int类型。

这令人困惑。问题是calculatorDisplay.text?.toInt!是否使用可选链接是由于以下原因?课文之后。可选链的结果始终是可选值,即使通过添加!打开链中的最后一项也是如此

这个!结束时:

calculatorDisplay.text?.toInt()!
只打开整数?这是由toInt返回的。为什么toInt返回可选的Int?因为字符串可能无法转换为Int,所以在这种情况下,toInt返回nil。例如,two.toInt将返回nil

要展开结果,可以使用括号将整个可选链分组,以便!将打开整个链:

secondNumber = (calculatorDisplay.text?.toInt())!
或通过使用!强制展开文本来删除可选链接:

但如果文本为nil或字符串无法转换为Int,则这些将崩溃。更好的方法是使用可选绑定:

另一种选择是使用nil合并操作符??。如果要在文本为nil时使用默认值,或者如果文本未成功转换为Int,则可以执行以下操作:

let secondNumber = calculatorDisplay.text?.toInt() ?? 0
如果文本不是nil并且转换成功,这将安全地展开toInt创建的可选文件。否则,0将被分配给secondNumber。无论哪种情况,secondNumber都是Int类型。

函数toInt of String返回Int?。这意味着不能保证它有一个值。当你使用!关于这个函数的响应,你基本上是说不,别担心,兄弟;它有一个弗雷尔的值

更合适的用法如下所述:

函数toInt of String返回Int?。这意味着不能保证它有一个值。当你使用!关于这个函数的响应,你基本上是说不,别担心,兄弟;它有一个弗雷尔的值

更合适的用法如下所述:


虽然提出问题的人确实在使用可选链接,但这与为什么toInt返回可选Int无关。在字符串实例上调用toInt不一定会返回值,例如,如果该人编写了30.toInt,而不是30.toInt。请仔细考虑一下你的答案,因为你的其他建议是正确的。我个人建议使用可选绑定,因为返回0的nil合并可能是一个有效值,并且可能会偏离它们的逻辑。不,但toInt返回可选或不返回可选的事实并不能解释为什么calculatorDisplay.text?.toInt!仍然是可选的。这就是给他带来麻烦的原因。这个最后,仅展开toInt的结果,但链仍然返回可选值,因为?课文之后。这就是我的观点。阿克!你是对的,我误读了,以为整个表情都被拆开了,而只是一个托因。很抱歉。也经过测试和确认。虽然问问题的人确实在使用可选链接,但这与toInt返回可选Int的原因无关。在字符串实例上调用toInt并不一定会返回值,例如,如果该人编写了30.toInt,而不是30.toInt。请仔细考虑一下你的答案,因为你的其他建议是正确的。