bar*_*dog 6 generics protocols ios swift
如果我有以下代码:
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)
}
}
Run Code Online (Sandbox Code Playgroud)
在Object符合的地方ObjectType,你会期望你可以访问objectTypeString任何ObjectInstance.但编译器说Type T has no member objectTypeString当在某个继承的泛型类型上访问该成员时Object,如上面的代码所示.当函数是非泛型函数并且仅传入Object参数时,没有问题.那么为什么参数是通用的,所以我无法访问符合类应该访问的协议成员?
我在这里遇到了这个问题,但我对解决方法不感兴趣,我只想了解通用系统是什么让我的例子不起作用.(简单的解决方法是做<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)
}
}
Run Code Online (Sandbox Code Playgroud)
但问题是,即使我们不启动对象,自动完成也会带来 objectTypeString!这就是我不明白的地方,正如你所说,也许这就是错误发生的地方!
希望有帮助 <3
| 归档时间: |
|
| 查看次数: |
479 次 |
| 最近记录: |