gpt4 book ai didi

swift - 'T' 类型的值没有动态成员 'object' 使用来自根类型 'T' 的 key 路径

转载 作者:行者123 更新时间:2023-12-04 07:24:00 24 4
gpt4 key购买 nike

我有这样的课:

class ObjectA:ObservableObject { 
@Published var type:ObjectSheetType = .none
}
我正在使用这样的类来处理这种对象的实例:
class ProcessObject {

@ObservedObject private var object:ObjectA

init(object:ObjectA) {
self.object = object
}

process() {
if object.type == .big {
// bla bla
}
...
}
然后我决定添加另一个类:
class ObjectB:ObservableObject { 
@Published var type:ObjectSheetType = .none
}
和一个协议(protocol)
protocol ObjectProtocol {
var type:ObjectSheetType { get set }
}
此协议(protocol)已添加到两个类中: ObjectAObjectB .
然后上课 ProcessObject被修改为接受两种对象:
class processObject<T:ObjectProtocol, ObservableObject > {

@ObservedObject private var object:T

init(object:T) {
self.object = object
}

Error: Referencing subscript 'subscript(dynamicMember:)' requires wrapper 'ObservedObject.Wrapper'Insert '$'Value of type 'T' has no dynamic member 'object' using key path from root type 'T'


错误指向
if object.type == .big {
而且 Xcode 还希望我在 object 的每个已发布属性前使用 $ ?
我该如何解决这个问题?

最佳答案

您需要做的就是修复 T 的协议(protocol)一致性,因为现在 ObservableObject 被视为另一种泛型类型而不是协议(protocol)。
用 & 表示 T 应该同时符合这两个协议(protocol)

class ProcessObject<T: ObjectProtocol & ObservableObject> {

}
另一种方式是说 ObjectProtocol 从 ObservableObject 继承,然后只在所有符合声明中使用 ObjectProtocol
protocol ObjectProtocol: ObservableObject {
var type:ObjectSheetType { get set }
}
但这改变了 ObjectProtocol 是什么,您可能不希望两个协议(protocol)之间的紧密耦合

关于swift - 'T' 类型的值没有动态成员 'object' 使用来自根类型 'T' 的 key 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68315957/

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