gpt4 book ai didi

swift - 不能对类型的不可变值使用可变成员

转载 作者:IT王子 更新时间:2023-10-29 05:12:24 25 4
gpt4 key购买 nike

我有以下结构:

public protocol SuperModel {
// empty protocol
}
struct ModelOne: SuperModel {
struct SubModelOne {
var someVar: Double
var othervar: Double?
}
var sub: SubModelOne?
mutating func setSub(sub: SubModelOne) {
self.sub = sub
}
}

在我的课上,我想像这样使用这个结构:

final class SomeClass: SuperClass {
var data: SuperModel
init() {
self.data = ModelOne()
}
func someFunc() {
(self.data as! ModelOne).setSub(ModelOne.SubModelOne(someVar: 2, otherVar: 1))
}
}

我收到以下错误:无法对“ModelOne”类型的不可变值使用可变成员。为什么会这样,我该如何解决?

最佳答案

当您将类型转换应用于值类型(例如结构)时,如果成功,您将收到请求值的不可变副本:

(self.data as! ModelOne) // this is copy of data

唯一的方法(据我所知)如何改变需要转换的值 - 重新分配值(正如@Sahil Beri 指出的那样,您需要声明变量):

func someFunc() {
if var data = data as? ModelOne {
data.setSub(ModelOne.SubModelOne(someVar: 2, otherVar: 1))
self.data = data // you can do this since ModelOne conforms to SuperModel
}
}

关于swift - 不能对类型的不可变值使用可变成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38764003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com