从 Swift 覆盖 returns NSArray 中的 Obj-C class 方法
Overriding an Obj-C class method from Swift which returns NSArray
我似乎无法覆盖以下方法,并创建了一个独立的示例,现在已经困扰我几个小时了。
这几乎肯定是愚蠢的,但我似乎无法覆盖 swift class 中的 class 方法,其中基础 class 是 Objective C,具体来说 return 类型是 NSArray*
.
我刚得到错误,“Method does not override any method from its superclass
”
所以我的失败如下图所示:
但是如果将 return 类型更改为像 NSString*
这样简单的类型,它就可以正常工作
现在我已经尝试 Array<AnyObject>
并与其他一些人一起玩过,但是我对 Swift 语法还是有点陌生,所以我几乎肯定遗漏了一些明显的东西。
NSArray *
作为 [AnyObject]!
桥接到 Swift(AnyObject
实例的隐式解包 Array
)。查看生成的Swift接口为[ExampleBase exampleMethod]
:
将您的方法 return 类型更改为 [AnyObject]!
。
override class func exampleMethod() -> [AnyObject]! {
return []
}
要在 Swift 子类中指定可选值或具体值,请使用 Objective-C 可空性说明符:
+ (NSArray * _Nonnull)exampleMethod;
连接到 override class func exampleMethod() -> [AnyObject]
+ (NSArray * _Nullable)exampleMethod;
连接到 override class func exampleMethod() -> [AnyObject]?
+ (NSArray *)exampleMethod;
和 + (NSArray * _Null_unspecified)exampleMethod;
具有相同的行为并连接到隐式展开的可选。
一个解决方案是为编译器提供有关类型的更多信息。
在 ObjC 中声明方法
+ (NSArray<NSString *>*)exampleMethod;
然后在Swift你可以写
override class func exampleMethod() -> [String]
我似乎无法覆盖以下方法,并创建了一个独立的示例,现在已经困扰我几个小时了。
这几乎肯定是愚蠢的,但我似乎无法覆盖 swift class 中的 class 方法,其中基础 class 是 Objective C,具体来说 return 类型是 NSArray*
.
我刚得到错误,“Method does not override any method from its superclass
”
所以我的失败如下图所示:
但是如果将 return 类型更改为像 NSString*
这样简单的类型,它就可以正常工作现在我已经尝试 Array<AnyObject>
并与其他一些人一起玩过,但是我对 Swift 语法还是有点陌生,所以我几乎肯定遗漏了一些明显的东西。
NSArray *
作为 [AnyObject]!
桥接到 Swift(AnyObject
实例的隐式解包 Array
)。查看生成的Swift接口为[ExampleBase exampleMethod]
:
将您的方法 return 类型更改为 [AnyObject]!
。
override class func exampleMethod() -> [AnyObject]! {
return []
}
要在 Swift 子类中指定可选值或具体值,请使用 Objective-C 可空性说明符:
+ (NSArray * _Nonnull)exampleMethod;
连接到 override class func exampleMethod() -> [AnyObject]
+ (NSArray * _Nullable)exampleMethod;
连接到 override class func exampleMethod() -> [AnyObject]?
+ (NSArray *)exampleMethod;
和 + (NSArray * _Null_unspecified)exampleMethod;
具有相同的行为并连接到隐式展开的可选。
一个解决方案是为编译器提供有关类型的更多信息。
在 ObjC 中声明方法
+ (NSArray<NSString *>*)exampleMethod;
然后在Swift你可以写
override class func exampleMethod() -> [String]