Tad*_*riz 8 generics ios swift
由于斯威夫特缺乏协方差,我需要一些解决方法.我来自Java世界,所以我本能地尝试从一种类型到其他泛型类型创建约束.
所以我写了下面的课:
class Factory<T: AnyObject> {
let factoryClosure: () -> T
init(closure: () -> T) {
factoryClosure = closure
}
init<CHILD: T>(childFactory: Factory<CHILD>) {
factoryClosure = { () -> T in
return otherFactory.create()
}
}
func create() -> T {
return factoryClosure()
}
}
Run Code Online (Sandbox Code Playgroud)
我希望这个工作得很好.我有T定义,CHILD应该是一个子类T.然而,Swift编译器不同意并在行上显示以下错误init<CHILD: T>.
从非协议,非类型'T'继承
我也尝试了不同场景中的泛型参数继承.将以下方法添加到类中(并删除导致编译错误的init).
func to<OTHER where OTHER: AnyObject, T: OTHER>() {
}
Run Code Online (Sandbox Code Playgroud)
这产生基本相同的输出.
键入'T'约束为非协议类型'OTHER'
我可能工作的任何东西都没有,并以类似的错误消息结束.这是Swift中的错误吗?或者我错过了什么?或者它是Swift的一个功能,并且永远不会像我想的那样工作?
如果你想传递任何类型的Factory<T>where你只需要写:TAnyObject
init(childFactory: Factory<T>) {
factoryClosure = { () -> T in
return otherFactory.create()
}
}
Run Code Online (Sandbox Code Playgroud)
因为 T 自动受到你的班级的约束。
| 归档时间: |
|
| 查看次数: |
253 次 |
| 最近记录: |