【发布时间】:2016-05-06 18:41:46
【问题描述】:
我对 Swift 很陌生,但我对 OO 编程有一些经验。我已经开始尝试在 Swift 中使用参数化类,并且在重载方法时遇到了一个奇怪的设计特性。如果我定义以下类:
class ParameterClassA {
}
class ParameterClassB: ParameterClassA {
}
class WorkingClassA<T: ParameterClassA> {
func someFunction(param: T) -> Void {
}
}
class WorkingClassB: WorkingClassA<ParameterClassB> {
override func someFunction(param: ParameterClassA) {
}
}
然后代码编译正常。但是,您会注意到,我已经重载了通常使用参数类型的函数,在我的示例中是ParameterClassB,并给它一个ParameterClassA 类型的参数。那应该如何工作?我知道它在 Java 中是不允许的,我想知道类型参数是如何解释的。它可以是类型参数的类层次结构中的任何东西吗?
另外请注意,如果我删除WorkingClassA 中的类型参数约束: ParameterClassA,问题完全一样。
如果我删除 override 关键字,则会收到一个编译器错误,要求我添加它。
非常感谢您的任何解释!
【问题讨论】:
标签: swift generics inheritance overloading