我似乎无法覆盖以下方法,并创建了一个独立的示例,现在让我烦恼了几个小时。
它几乎肯定是愚蠢的,但我似乎无法覆盖swift类中的类方法,其中基类是Objective C,特别是返回类型是NSArray*
。
我刚收到错误," Method does not override any method from its superclass
"
所以我的失败如下所示:
但是如果将返回类型更改为像NSString *
这样简单的东西,它就可以正常工作现在我已经尝试了Array<AnyObject>
并与其他几个人一起玩了,但我对Swift语法仍然有点新鲜,所以我几乎肯定错过了一些明显的东西。
答案 0 :(得分:5)
NSArray *
以[AnyObject]!
(Array
个AnyObject
实例的隐式解包[ExampleBase exampleMethod]
桥接到Swift。查看为[AnyObject]!
生成的Swift接口:
将方法返回类型更改为override class func exampleMethod() -> [AnyObject]! {
return []
}
。
+ (NSArray * _Nonnull)exampleMethod;
要在Swift子类中指定可选或具体值,请使用Objective-C nullability说明符:
override class func exampleMethod() -> [AnyObject]
与+ (NSArray * _Nullable)exampleMethod;
override class func exampleMethod() -> [AnyObject]?
与+ (NSArray *)exampleMethod;
+ (NSArray * _Null_unspecified)exampleMethod;
和QWidget
具有相同的行为并且与隐式展开的可选项桥接。
答案 1 :(得分:3)
解决方案是为编译器提供有关类型的更多信息。
在ObjC中声明方法
+ (NSArray<NSString *>*)exampleMethod;
然后在Swift中你可以写
override class func exampleMethod() -> [String]