类型 'T' 的值没有使用来自根类型 'T' 的键路径的动态成员 'object'
Value of type 'T' has no dynamic member 'object' using key path from root type 'T'
我有一个 class 这样的:
class ObjectA:ObservableObject {
@Published var type:ObjectSheetType = .none
}
我正在使用这样的 class 来处理此类对象的实例:
class ProcessObject {
@ObservedObject private var object:ObjectA
init(object:ObjectA) {
self.object = object
}
process() {
if object.type == .big {
// bla bla
}
...
}
那我决定再加一个class:
class ObjectB:ObservableObject {
@Published var type:ObjectSheetType = .none
}
和协议
protocol ObjectProtocol {
var type:ObjectSheetType { get set }
}
此协议已添加到 classes:ObjectA
和 ObjectB
。
然后 class 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 的协议一致性,因为现在 ObservableObject 被视为另一种通用类型,而不是协议。
用 & 表示 T 应该同时符合这两个协议
class ProcessObject<T: ObjectProtocol & ObservableObject> {
}
另一种说法是ObjectProtocol继承自ObservableObject,然后在所有的conform声明中只使用ObjectProtocol
protocol ObjectProtocol: ObservableObject {
var type:ObjectSheetType { get set }
}
但这改变了 ObjectProtocol 的含义,您可能不希望两个协议之间存在紧密耦合
我有一个 class 这样的:
class ObjectA:ObservableObject {
@Published var type:ObjectSheetType = .none
}
我正在使用这样的 class 来处理此类对象的实例:
class ProcessObject {
@ObservedObject private var object:ObjectA
init(object:ObjectA) {
self.object = object
}
process() {
if object.type == .big {
// bla bla
}
...
}
那我决定再加一个class:
class ObjectB:ObservableObject {
@Published var type:ObjectSheetType = .none
}
和协议
protocol ObjectProtocol {
var type:ObjectSheetType { get set }
}
此协议已添加到 classes:ObjectA
和 ObjectB
。
然后 class 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 的协议一致性,因为现在 ObservableObject 被视为另一种通用类型,而不是协议。
用 & 表示 T 应该同时符合这两个协议
class ProcessObject<T: ObjectProtocol & ObservableObject> {
}
另一种说法是ObjectProtocol继承自ObservableObject,然后在所有的conform声明中只使用ObjectProtocol
protocol ObjectProtocol: ObservableObject {
var type:ObjectSheetType { get set }
}
但这改变了 ObjectProtocol 的含义,您可能不希望两个协议之间存在紧密耦合