ios - 展开可选时出错

标签 ios swift

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

如果 fahrenheitValuenil,将自动返回 nil,否则将返回 converted(to:) 的值 调用。

关于ios - 展开可选时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47477208/

相关文章:

ios - 使用 NSTimer 调用 performSelectorOnMainThread

android - 推送服务器如何知道将通知发送到哪里

ios - 如何将 "setCompletionHandler"代码从 Objective-C 转换为 Swift?

swift - LLDB 输出错误 : use of undeclared type '$__lldb_context'

ios - UIImagePickerController 扩展发现失败,错误为 : (null)

iphone - 如何检查文本字段是否包含罗马数字

iphone - 应用程序在 xcode 中释放数组对象时崩溃

ios - messageUI.framework 对发图片有用吗?

swift - 我自己的自定义类中的扩展

ios - 在 Objective C 类中使用 Swift 类和 swift 项目