我没有找到任何解决方案,并且很有可能它不可能但我会试一试(如果不可能我会很乐意得到一个小解释原因)。
我正在尝试在Swift中创建一个类,我们称之为Foo,我希望FooChild继承自Foo。到目前为止,没有问题。问题是,我希望Foo动态地继承“任何类”,可能是通用类型。
像
这样的东西class Foo<T> : <T>{
}
class FooChild : Foo<NSObject> {
}
class FooChild2 : Foo<UIview> {
}
我希望FooChild和FooChild2都继承自Foo,但是我希望foo从NSObject继承一次,并且从UIView继承一次(在示例中使用随机类)。
这可能吗?即使在我将以某种方式桥接的Objective-C代码中。
答案 0 :(得分:1)
Swift 1.2
不,这是不可能的。
你可以做的是:
protocol Foo { }
class FooChild1: NSObject, Foo { }
class FooChild2: UIView, Foo { }
Swift 2
是的,现在这是可能的。
非泛型类可以继承自泛型类。 (15520519)
请参阅:Xcode 7 Beta Release Notes,“Swift 2.0和Objective-C中的新内容”,“Swift语言功能”一节
E.g。以下是可能的:
import UIKit
class Foo<T> { }
class FooChild: Foo<NSObject> { }
class FooChild2: Foo<UIView> { }
let fooChild = FooChild()
let fooChild2 = FooChild2()
此外,在Swift 2中,如果您需要Swift 1.2示例中的协议Foo
来提供某些默认行为,则可以使用默认协议实现。
您可以使用协议扩展为该协议的任何方法或属性要求提供默认实现。如果符合类型提供了自己的必需方法或属性的实现,则将使用该实现而不是扩展提供的实现。
请参阅:The Swift Programming Language,“协议”一章,“提供默认实现”一节