gpt4 book ai didi

ios - 展开标签并转换为 Int()

转载 作者:搜寻专家 更新时间:2023-11-01 05:48:10 25 4
gpt4 key购买 nike

我想在这里做这个教程。我是一个完全的初学者,这将是我的第一个 iOS 应用程序时期:

http://www.ioscreator.com/tutorials/calculator-tutorial-in-ios8-with-swift

这是我的代码:

导入 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 的值?没有解开,你的意思是使用!还是?

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

First error Second error

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

最佳答案

这令人困惑。问题是 calculatorDisplay.text?.toInt()! 正在使用可选链接,因为 ?text 之后>。 可选链的结果始终是一个可选值,即使您通过添加 ! 展开链中的最后一项也是如此。

结尾的 !:

calculatorDisplay.text?.toInt()!

仅解包 toInt() 返回的 Int?。为什么 toInt() 返回一个可选的 Int?因为字符串可能无法转换为 Int,所以 toInt() 在这些情况下返回 nil。例如,"two".toInt() 将返回 nil

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

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

或通过强制解包 text! 删除可选链接:

secondNumber = calculatorDisplay.text!.toInt()!

但如果 textnil 或者如果字符串无法转换为 Int,这些将崩溃。更好的方法是使用可选绑定(bind):

if let secondNumber = calculatorDisplay.text?.toInt() {
// when we get here, we know `text` wasn't nil and we
// know it converted to an Int. At this point secondNumber
// is safely unwrapped and ready to use. Its type is Int.
}

另一种选择是使用nil 合并运算符 ??。如果您想在 textnil 或文本未成功转换为 Int 时使用默认值,那么您可以这样做像这样:

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

如果 text 不是 nil 并且转换成功,这将安全地解包由 toInt() 创建的可选值。否则,0 将分配给 secondNumber。在任何一种情况下,secondNumber 都是 Int 类型。

关于ios - 展开标签并转换为 Int(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26915699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com