gpt4 book ai didi

swift - 创建一个计算器应用程序

转载 作者:行者123 更新时间:2023-11-28 11:06:54 24 4
gpt4 key购买 nike

所以我是 Swift 的新手,一直在按照本教程制作这个应用程序 https://www.youtube.com/watch?v=NJHsdjH2HdY

这是第一个问题:currentNumber = currentNumber * 10 + Float(sender.titleLabel!.text!.toInt()!)

在评论部分,那个人说要把这行改成:currentNumber = currentNumber * 10 + Float(Int(sender.titleLabel!.text!)!)

我这样做了,但出现错误:Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

最佳答案

如评论中所述,您应始终避免使用“崩溃运算符”(!) – 并学会安全地处理可选值。

您的程序正在崩溃,因为 titleLabeltextInt(...)nil – 然后你试图强行打开它们。这可能意味着您的按钮没有 titleLabeltitleLabel 的文本无法转换为 Int

解决方案是在遇到可选值时安全地处理它们。有很多方法可以做到这一点,但我通常喜欢使用一个或多个 guard 语句。这允许您安全地解包一个可选的,如果它有一个值,否则它将执行括号内的代码。当 future 的代码依赖于可选项不是nil时,这很有用。例如:

guard let buttonText = sender.titleLabel?.text else {
print("Sender didn't have either a titleLabel or text!")
return
}

guard let textAsInt = Int(buttonText) else {
print("Text wasn't convertible to an Int!")
return
}

currentNumber = currentNumber*10 + Float(textAsInt)

现在您得到有用的 print 消息而不是崩溃!因此,您确切地知道出了什么问题,以及您可以采取什么措施来修复它(如果它需要修复)。

如果您想要更简洁的代码但不太精确的错误,您还可以将这两项检查合并到一个 guard 中:

guard let buttonText = sender.titleLabel?.text, textAsInt = Int(buttonText) else {
print("Something went wrong when converting the button title to an Int!")
return
}

currentNumber = currentNumber*10 + Float(textAsInt)

或者如果你喜欢闭包,你可以使用flatMap:

guard let i = sender.titleLabel?.text.flatMap({Int($0)}) else {
print("Something went wrong when converting the button title to an Int!")
return
}

currentNumber = currentNumber*10 + Float(i)

flatMap 选项起初看起来有点奇怪,但它所做的只是尝试将按钮的 titleLabeltext 转换为一个 Int。如果失败,它将返回 nil(guard 将获取),否则它将返回文本的数值。


@vacawama said in the comments 一样,如果 titleLabeltextInt(...)nil:

currentNumber = currentNumber * 10 + Float(Int(sender.titleLabel?.text ?? "") ?? 0)

但是请记住,这可能会导致意外行为。我怀疑您的程序正在崩溃,因为您的逻辑正在运行非数字按钮,例如“+”按钮。如果是这种情况,每次按下非数字按钮时,您的数字都会乘以 10。您必须首先确保您的逻辑仅在数字按钮上被调用。

虽然没有看到您的完整代码,但很难确定。


有关如何安全处理可选值的更多信息,请参阅此 extensive Q&A on the subject

关于swift - 创建一个计算器应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37074909/

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