我只是好奇是否可以做类似下面的事情
protocol Data { }
class A: Data { }
class B: Data { }
class Generic<T> { }
class doStuff {
func prepareToDoStuff() {
self.doTheStuffWithGenerics([Generic<A>(), Generic<B>])
}
func doTheStuffWithGenerics<T: Generic<Data>>(_ generics: [T]) {
}
}
目前我的编译器告诉我不要说
"cannot convert value of type 'Generic[A]' to expected element type
'Generic[Data]'"
有什么想法吗?解决方案?
其他人已经解释了为什么不起作用。所以我只关注解决方法。 Apple 自己解决此问题的方法(例如,查看 Collection
协议(protocol))是使用协议(protocol)。通常将您的逻辑移至 Generic
类,或在您的协议(protocol)上使用扩展类。
例如:
protocol Data { }
protocol GenericDataType {
func doStuff()
}
class A: Data { }
class B: Data { }
class Generic<T: Data>: GenericDataType {
func doStuff() {
print("Processing element")
}
}
class doStuff {
func prepareToDoStuff() {
let array: [GenericDataType] = [Generic<A>(), Generic<B>()]
self.doTheStuffWithGenerics(array)
}
func doTheStuffWithGenerics(_ generics: [GenericDataType]) {
for element in generics {
element.doStuff()
}
}
}