以下是SO专家的一些非常基本的代码。我有两个字段(重量和高度)和一个分段控件有两个选项。单击控件时,我会触发一个动作以获取权重和高度字段的值。然后,我做了少量的数学运算,并希望将结果转储到另一个标签字段(结果)。无论何时计算条目,结果字段都填充“NaN”。任何想法为什么?我确定它在某处格式化或转换。
编辑:已更新以指定问题。
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var WeightNumberTextField: UITextField!
@IBOutlet weak var HeightNumberTextField: UITextField!
@IBOutlet weak var CalculateType: UISegmentedControl!
@IBOutlet weak var results: UILabel!
var weight = Float()
var height = Float()
var BMI = Float()
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func newCalculation(sender: UISegmentedControl) {
switch CalculateType.selectedSegmentIndex {
case 0:
let BMI = (weight * 703) / height;
results.text = BMI.description;
case 1:
let BMI = weight / height;
results.text = BMI.description;
default:
break
}
}
}
答案 0 :(得分:4)
weight
和height
字段初始化为0.您永远不会修改它们。在浮点中除以0/0会返回NaN(非数字)。
你可能想要这样的东西:
@IBAction func newCalculation(sender: UISegmentedControl) {
weight = Float(WeightNumberTextField.text ?? "0") ?? 0
height = Float(HeightNumberTextField.text ?? "0") ?? 0
switch CalculateType.selectedSegmentIndex {
case 0:
let BMI = (weight * 703) / height;
results.text = BMI.description;
case 1:
let BMI = weight / height;
results.text = BMI.description;
default:
break
}
}
答案 1 :(得分:0)
如果它在断点处打破"然后在你的代码中的某个地方,你已经设置了一个。这是代码中的一个点,Xcode调试器会停止(暂停),以便您使用调试器等对代码执行各种操作...
您可以通过以下几种方式之一查看断点的位置:
1)使用"断点导航器"它出现在Xcode最左侧的窗格中,如下所示:
2)通过在代码的阴沟中查找断点。在实际的代码窗格中,您的所有代码都在其中,您将在其左侧看到一个" gutter"这可能会以多种方式出现,具体取决于您如何设置Xcode ...我的显示方式如下(带断点):
note)箭头指向的位置是断点所在的位置。即突出显示的位为蓝色。你可以通过点击它们来启用和禁用它们......如果它被禁用,它就会出现"灰色"就像这样:
最后,关于引用文本字段"填写值"以及"未分段控制操作",您需要:
i)文本字段值:
// Somewhere in a code-block (i.e. a function)
let height = self.HeightNumberTextField.text
// Do some validation i.e. is it a number, is it greater than etc...
ii)从行动中引用分段控制:
// As you can see there's (sender: UISegmentedControl) which
// is the segmented control that you're clicking on so your
// switch statement should be..
switch sender.selectedSegmentIndex
sender(适用于所有控件)是执行操作的控件,即在这种情况下,您已经使用的UISegmentedControl。如果你有几个UISegmentedControl引用一个动作,这将特别方便。
希望这有帮助!
编辑只需添加一些内容,我个人拥有"默认值"在两个文本字段上都是" 0"因此,当视图加载时,至少有一些东西存在。此外,我将实际的BMI计算结果移动到另一个函数,并从动作中引用它,而不是在动作中将其计算出来。