动态(通用)继承自swift

时间:2015-07-14 11:30:38

标签: ios objective-c swift templates generics

我没有找到任何解决方案,并且很有可能它不可能但我会试一试(如果不可能我会很乐意得到一个小解释原因)。

我正在尝试在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代码中。

1 个答案:

答案 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,“协议”一章,“提供默认实现”一节