今天早上更新了 Xcode,我的 SwiftData 模型充满了关于这在 Swift 6 中如何成为错误的警告。
Cannot expand accessors on variable declared with 'let'; this is an error in the Swift 6 language mode
一个例子:
@Model
class Expense {
let id: UUID // warning here
var cashflow: Int
let isPermanent: Bool // warning here
var name: String
var asset: Asset?
var liability: Liability?
var player: Player?
var profession: Profession?
init(name: String, cashflow: Int, isPermanent: Bool) {
self.id = UUID()
self.cashflow = cashflow
self.isPermanent = isPermanent
self.name = name
}
}
我可以通过将警告从
let
更改为 var
来消除警告,但是如果我希望这些值实际上不可更改,我该怎么办?我不希望在初始化后能够更改对象的 id
,因此将其声明为 var
感觉非常错误。
您可以使用
private
访问修饰符来写入属性
private(set) var id: UUID
var cashflow: Int
private(set) var isPermanent: Bool
var name: String
那么你只需要小心同一个类中的方法,这样你就不会改变那里的值。