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

时间:2015-04-17 14:19:42

标签: objective-c swift

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

课程是:

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

协议BaseView是:

@protocol BaseView < NSObject >

- (id)getNativeInstance;

@end

编译器告诉我:

Type 'BaseViewFactoryImpl<T>' does not conform to protocol 'BaseView'

如果我删除<T>,则没有错误。

这里有什么问题?如何获得正确的泛型类实现?

3 个答案:

答案 0 :(得分:0)

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

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

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

class StringViewModel : BaseView {

    typealias T = String

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

}

答案 1 :(得分:0)

// BaseViewFactory.swift

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

// BaseViewProtocol.h

@protocol BaseView <NSObject>

- (id)getNativeInstance;

@end

// BridgingHeader.h

#import "BaseClassProtocol.h"

您的代码应该有效。您是否创建了桥接标头以导入obj-C协议文件?

答案 2 :(得分:0)

这在Swift 5中有效:

class BaseViewFactoryImpl<T> : NSObject, BaseView {
  func getNativeInstance() -> Any {
    return "fsd"
  }
}

无构建错误:)