如果我有以下代码:
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
,如上面的代码所示。当函数是非泛型函数并且只传入<T: ObjectType>
参数时,没有问题。那么为什么参数是通用的,所以我无法访问符合类应该有权访问的协议成员?
我遇到了这个问题here,但我对解决方法不感兴趣,我只想了解通用系统的含义,这使我的示例无效。 (简单的解决方法是执行def
)
答案 0 :(得分:0)
也许我错了,或者我完全不理解你的问题,但我认为你可能会错过发起&#34;反对&#34;。
您愿意的代码可能是以下代码:
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上升!这是我不理解的,正如你所说的那样,也许是错误发生的地方!
希望它有所帮助&lt; 3