如果我有以下代码:
protocol ObjectType {
var title: String { get set }
}
extension ObjectType {
var objectTypeString: String {
let mirror = Mirror(reflecting: self)
return "\(mirror.subjectType)"
}
}
class Object: ObjectType {
var title = ""
}
class SomeOtherClass {
private func someFunc<T: Object>(object: T) {
print(object.objectTypeString)
}
}
哪里Object
符合 ObjectType
, 你会期望你可以访问 objectTypeString
在任何 ObjectInstance
.但是编译器说 Type T has no member objectTypeString
当在继承自 Object
的某些泛型类型上访问该成员时,如上面的代码所示。当函数是非泛型的并且只是传入一个 Object
时参数,没有问题。那么,为什么要让参数成为通用参数,这样我就无法访问符合类应该有权访问的协议(protocol)成员?
我遇到了这个问题 here但我对变通方法不感兴趣,我只想了解是什么让我的示例无法正常工作的通用系统。 (简单的解决方法是执行 <T: ObjectType>
)
最佳答案
也许我错了或者我没有完全理解你的问题,但我认为你可能缺少启动“对象”。
你愿意的代码可能是下面的代码:
protocol ObjectType {
var title: String { get set }
}
extension ObjectType {
var objectTypeString: String {
let mirror = Mirror(reflecting: self)
return "\(mirror.subjectType)"
}
}
class Object: ObjectType {
var title = ""
}
class SomeOtherClass {
private func someFunc<T: Object>(object: T) {
let object = Object()
print(object.objectTypeString)
}
}
但问题是,即使我们不初始化对象,自动完成也会带来 objectTypeString !这就是我不明白的地方,正如你所说,这可能是错误发生的地方!
希望对你有帮助<3
关于ios - 具有协议(protocol)扩展的 Swift 通用未知成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33848879/