实现Objective-C协议的Swift通用类

10 objective-c swift

我的目的是在Swift中创建一个符合Objective-C协议的泛型类:

这堂课是:

class BaseViewFactoryImpl<T> : NSObject, BaseView {
  func getNativeInstance() -> AnyObject {
    return String("fsd")
  }
}
Run Code Online (Sandbox Code Playgroud)

协议BaseView是:

@protocol BaseView < NSObject >

- (id)getNativeInstance;

@end
Run Code Online (Sandbox Code Playgroud)

编译器告诉我:

Type 'BaseViewFactoryImpl<T>' does not conform to protocol 'BaseView'
Run Code Online (Sandbox Code Playgroud)

如果我删除<T>那么没有错误.

这有什么不对?如何获得正确的泛型类实现?

bub*_*uxu 0

如果您创建一个新的通用视图模型,当您尝试创建通用视图模型的任何子类时,您也需要将该子类声明为通用类。这有点烦人。

为了更好的方法,您可以使用 typealias 来声明实例的类型,而不是使用泛型:

protocol BaseView {
    typealias T
    func getNativeInstance() -> T!
}

class StringViewModel : BaseView {

    typealias T = String

    func getNativeInstance() -> String! {
        return T()
    }

}
Run Code Online (Sandbox Code Playgroud)