在以下代码中,我从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)