在以下代码中,我从xcode中收到一条错误消息:“无法对不可变值使用变异成员:'fahrenheitValue'是'let'常量。”

此代码示例摘自iOS 6版的The Big Nerd Ranch Guide。
部分原因是我不太了解这本书为什么会出错,我理解了错误的含义,但我不知道该如何解决...

有人可以告诉我我在做什么错吗?

import UIKit

class ConversionViewController: UIViewController {
    @IBOutlet var celsiusLabel: UILabel!
    var fahrenheitValue: Measurement<UnitTemperature>? {
        didSet {
            updateCelsiusLabel()
        }
    }
    var celsiusValue: Measurement<UnitTemperature>? {
        if let fahrenheitValue = fahrenheitValue {
            return fahrenheitValue.convert(to: .celsius)
        }else{
            return nil
        }
    }
}

最佳答案

问题是这两行:

if let fahrenheitValue = fahrenheitValue {
    return fahrenheitValue.convert(to: .celsius)

您无法在convert(to:)上调用fahrenheitValue,因为fahrenheitValue是一个常量,而convert(to:)试图修改该常量,因此会出现错误。

解决方案是将convert(to:)替换为converted(to:)。前者不返回任何内容,并尝试修改接收者。后者创建一个新的度量并返回新值。那就是你想要的。
return fahrenheitValue.converted(to: .celsius)

08-27 19:15