我的目的是在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>
,则没有错误。
这里有什么问题?如何获得正确的泛型类实现?
答案 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"
}
}
无构建错误:)