在下面的代码中,我从 xcode 中收到一条错误消息:“不能在不可变值上使用可变成员:'fahrenheitValue' 是一个 'let' 常量。”
此代码示例来自适用于 iOS 第 6 版的 Big Nerd Ranch 指南。 部分原因是我没有真正理解为什么这本书会出错,我理解错误的含义,但我不知道如何解决这个问题......
有人能告诉我我做错了什么吗?
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
}
}
}
最佳答案
rmaddy described问题的根源在于,您试图在本地 let
常量上调用变异函数,而您应该调用 converted
来返回转换后的值,而不是试图改变现有的值(value)。
但我可能会建议使用可选链接进一步简化它:
var celsiusValue: Measurement<UnitTemperature>? {
return fahrenheitValue?.converted(to: .celsius)
}
如果 fahrenheitValue
为 nil
,将自动返回 nil
,否则将返回 converted(to:) 的值
调用。
关于ios - 展开可选时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47477208/