【发布时间】:2015-05-01 22:56:34
【问题描述】:
这是我的游乐场 sn-p:
class Box {
func clone() -> Box {
return Box() // <- how to return superclass here?
}
}
class VBox:Box { }
let vb = VBox()
let cBox = vb.clone() // now cBox is a Box, not a VBox
我的clone 函数在所有情况下都返回Box 类。但是对于子类,我希望它返回超类(所以上面应该返回VBox)。
我知道我可以在VBox 中使用override clone 函数,但我想知道是否有更聪明的方法。
【问题讨论】:
-
VBox 是 Box 的 子类,而不是超类。 – 这可能是您正在寻找的:Protocol func returning Self
-
感冒了,我的大脑仍然感到朦胧。你说的对。所以看起来我需要让它们成为 NSObject 并使用 NSCopying? - 嗯。您即时更改了链接?
-
“Ehrm。你即时更改了链接” – 是的。
-
NSCopying不是合适的工具。这是不安全的,因为它必须通过AnyObject进行转换。NSCopying只能用于与 Cocoa 交互。正确的工具是实现init(copy:)。
标签: swift clone subclass superclass