我在Swift中使用泛型时有些困惑。
我有如下代码:
class Parent {
init(value: SomeThing) {
// ...
}
func clone<T: Parent>() -> T {
return T(value: SomeThing)
}
}
class Child : Parent {
var otherValue: SomeThingElse?
override func clone<T>() -> T where T : Parent {
let clone: Child = super.clone()
clone.otherValue = self.otherValue
return clone //ERROR: cannot convert return expression of type 'Child' to return type T
}
}
这个想法是创建一个简单的方法,返回一个与原本相同值的子实例。 我不想为每个Child类型的构造函数编写代码。(在真正的类中有很多参数,我想保持它的干净整洁)。
我得到的错误是:
cannot convert return expression of type 'Child' to return type T
。 建议的解决方案是使用return clone as! T
。 但这样我就失去了使用泛型类的理由。你有什么好主意可以在保持通用性的同时解决这个问题,而不必在每个类中都写出构造函数呢?
struct
)。值类型在赋值时被复制,所以你不必手动进行。你会失去子类的能力,但是你可以使用协议和扩展来解决这个问题。 - Palle