2017-08-16 61 views
1

我是一个相当新的程序员,我刚开始使用Xcode。 Atm我试图做一个计算器,可以从3个输入值(高度,长度为&宽度)计算总音量,但我似乎无法使其计算出来。现在我可以输入一个值并点击按钮,然后崩溃。 在此先感谢! 这里是我的代码:有3个输入值计算音量时出现问题。

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 
} 

override var representedObject: Any? { 
    didSet { 
    // Update the view, if already loaded. 
    } 
} 
@IBOutlet weak var HeightInput: NSTextField! 


@IBOutlet weak var LengthInput: NSTextField! 

@IBOutlet weak var WidthInput: NSTextField! 

@IBOutlet weak var Result: NSTextField! 


@IBAction func Calculate(_ sender: Any) { 
    var height = Int(HeightInput.stringValue) 

    var width = Int(WidthInput.stringValue) 

    var length = Int(LengthInput.stringValue) 

    if height == 0 
    { 
     Result.stringValue = "Error" 
    } 
    else{ 
     var result = width! * height! * length! 
      Result.stringValue = "the volume is: \(result)" 
    } 
} 
+1

它在哪里崩溃?你是否证实'NSTextField'不是'nil'?你是否验证过“高度/宽度/长度”不是“无”? - 学习**调试!** –

回答

0

尝试类似这样的东西。

@IBAction func Calculate(_ sender: Any) { 

    let height = Int(HeightInput.stringValue) ?? 0 
    let width = Int(WidthInput.stringValue) ?? 0 
    let length = Int(LengthInput.stringValue) ?? 0 

    let result = height * width * length 

    if result == 0 { 
     Result.stringValue = "Error" 
    else { 
     Result.stringValue = "The volume is: \(result)" 
    } 
} 

将标签值转换为整数时,它将返回一个可选项(意味着它可以为零)。在计算结果时,您需要用!强制展开这些选项。

我建议有条件地解开这些值。使用??意味着如果该值为零,它将默认为您在??之后放置的任何值。

+0

你仍然强制展开变量。 –

+0

好点@MartinR。我没有正确地测试我的解决方案。我现在改变了它。 –

+0

当我按下按钮来计算值时,仍然会出现同样的问题。我可以在我的控制台中看到它正确地增加了这些值,但它似乎有问题将值输出到标签。有任何想法吗? 感谢迄今。我已经学到了很多 – Rasmus