为什么我不能为Measurement <unitmass>变量赋值?

时间:2017-04-25 14:24:34

标签: swift swift3 measurement

我很难弄清楚如何将计算结果分配给变量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的截屏视频,但还没有找到答案。提前感谢您提供的任何帮助。

1 个答案:

答案 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的答案是相关的,并提供了更多解释。