Ios 展开标签并转换为int()
我在这里尝试做这个教程。我是一个完全的初学者,这将是我第一次使用iOS应用程序: 这是我的密码: 导入UIKitIos 展开标签并转换为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
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。请仔细考虑一下你的答案,因为你的其他建议是正确的。