我是IOS开发的新手,无法弄清楚如何解决此错误。任何人都可以帮助我。以下是我的代码和我使用NSNumberFormatter()
的代码部分的错误点。等待你的回复
class ViewController: UIViewController {
@IBOutlet weak var display: UILabel!
var usertyping
= false
@IBAction func appendDigit(sender: UIButton) {
let digit = sender.currentTitle!
if usertyping
{
display.text = display.text! + digit
}
else
{
display.text = digit
usertyping = true
}
}
@IBAction func operate(sender: UIButton) {
let operation = sender.currentTitle!
if usertyping{
enter()
}
switch operation {
case "×":
if operandstack.count >= 2
{
displayValue = operandstack.removeLast() * operandstack.removeLast()
enter()
}
default: break
}
}
var operandstack = Array<Double>()
@IBAction func enter() {
usertyping = false
operandstack.append(displayValue)
println("operandstack=\(operandstack)")
}
var displayValue: Double
{
get{
return NSNumberFormatter().numberFromString(display.text!)!.doubleValue
}
set{
display.text="(\newValue)"
usertyping=false
}
}
}
答案 0 :(得分:0)
我的猜测是失败了,因为display.text
为零或某些无效值。
展开可选项不会阻止它为零。它说你意识到它可能是零,但你知道它不是。如果你错了而且它是零,它就会失败。
通常情况下,为您这样的事情展开选项会从文件加载图像。该文件可能会丢失,但您知道它不在您的程序中,因此您可以假设结果永远不会为零。
在您的情况下,我认为display.text
可以为nil,您必须明确处理它或使用可选链接(?
)。
答案 1 :(得分:0)
我看到2危险&#34;!&#34;在这一行
return NSNumberFormatter().numberFromString(display.text!)!.doubleValue
其中一个可能是您致命错误的原因。
希望这有帮助。
答案 2 :(得分:0)
这是因为如果找不到有效号码,numberFromString
会返回nil
。
通过使用接收器解析字符串创建的NSNumber对象 格式。如果传递的字符串中没有数字,则返回nil。
参考here
如果您的display.text
没有任何有效号码,该语句将会崩溃。
你可以通过以下方式解决这个问题:
var displayValue: Double
{
get
{
var returnVal = NSNumber(int: 0)
if let dVal = NSNumberFormatter().numberFromString(display.text!)
{
returnVal = dVal
}
return returnVal.doubleValue
}
set
{
display.text = "(\newValue)"
usertyping = false
}
}