我很难弄清楚如何将计算结果分配给变量fileprivate var oneRepMax: Measurement<UnitMass>?
正如您所看到的,它是可选的,我尝试后它只是保持为零为其分配一个值。
我最初尝试直接分配给。value
属性,如下所示:
oneRepMax?.value = liftWeight * (Double(repetitions) ^^ 0.10)
但那并没有奏效。然后我确定我需要在分配期间指定unit
(基于当前用户默认单位),所以我尝试了这个(这里是完整的上下文):
func calculateOneRepMax() -> Measurement<UnitMass> {
let defaultWeightUnit = UserDefaults.weightUnit().unitName <-- returns "kg"
let unit = UnitMass(symbol: defaultWeightUnit) <-- 'po unit' shows <NSUnitMass: 0x61000003ffa0> kg
switch withFormula {
case "Lombardi":
let result = liftWeight * (Double(repetitions) ^^ 0.10)
oneRepMax? = Measurement(value: result, unit: unit)
*case next case...*
}
我真的认为这样可行,但仍然是,oneRepMax是零。
我已经阅读了Apple的文档,甚至回顾了一些Ray Wenderlich的截屏视频,但还没有找到答案。提前感谢您提供的任何帮助。
答案 0 :(得分:2)
改变这个:
oneRepMax? = Measurement(value: result, unit: unit)
为:
oneRepMax = Measurement(value: result, unit: unit)
如果oneRepMax
是目前值nil
的可选值,那么当您使用oneRepMax? = ...
时,分配就不会发生。
iOS/Swift: Can't assign optional String to UILabel text property的答案是相关的,并提供了更多解释。