Gen*_*ain 2 arrays generics protocols swift
我只是好奇是否可以做如下的事情
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]) {
}
}
Run Code Online (Sandbox Code Playgroud)
目前我的编译器告诉我没有说
“无法将类型‘Generic[A]’的值转换为预期元素类型‘Generic[Data]’”
有什么想法吗?解决方案?
其他人已经解释了为什么不起作用。所以我只关注解决方法。Collection苹果自己解决这个问题的方法(例如查看协议)是使用协议。将逻辑移至类中Generic或在协议上使用扩展类是很常见的。
例如:
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()
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5115 次 |
| 最近记录: |