Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
实现Objective-C协议的Swift泛型类_Objective C_Swift - Fatal编程技术网

实现Objective-C协议的Swift泛型类

实现Objective-C协议的Swift泛型类,objective-c,swift,Objective C,Swift,我的目的是在Swift中创建一个符合Objective-C协议的泛型类: 课程为: class BaseViewFactoryImpl<T> : NSObject, BaseView { func getNativeInstance() -> AnyObject { return String("fsd") } } 编译器告诉我: Type 'BaseViewFactoryImpl<T>' does not conform to protocol

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

课程为:

class BaseViewFactoryImpl<T> : NSObject, BaseView {
  func getNativeInstance() -> AnyObject {
    return String("fsd")
  }
}
编译器告诉我:

Type 'BaseViewFactoryImpl<T>' does not conform to protocol 'BaseView'
类型“BaseViewFactoryImpl”不符合协议“BaseView”
如果我删除
,则没有错误


这里怎么了?如何获得正确的泛型类实现?

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

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

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

class StringViewModel : BaseView {

    typealias T = String

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

}

//BaseViewFactory.swift

class BaseViewFactoryImpl<T> : NSObject, BaseView {
    func getNativeInstance() -> AnyObject {
        return String("fsd")
    }
你的代码应该可以工作。您是否创建了桥接头以导入obj-C协议文件?

这适用于Swift 5:

类BaseViewFactoryImpl:NSObject,BaseView{
func getNativeInstance()->Any{
返回“消防处”
}
}

无生成错误:)

对于泛型类,这是不可能的,请参阅以了解类似问题。
class BaseViewFactoryImpl<T> : NSObject, BaseView {
    func getNativeInstance() -> AnyObject {
        return String("fsd")
    }
@protocol BaseView <NSObject>

- (id)getNativeInstance;

@end
#import "BaseClassProtocol.h"