从Swift重写一个Obj-C类方法,返回NSArray

Adr*_*n_H 6 objective-c nsarray ios swift

我似乎无法覆盖以下方法,并创建了一个独立的示例,现在让我烦恼了几个小时.

它几乎肯定是愚蠢的,但我似乎无法覆盖swift类中的类方法,其中基类是Objective C,特别是返回类型是一个NSArray*.

我刚收到错误," Method does not override any method from its superclass"

所以我的失败如下所示:

显示错误,包含类和超类的定义

但是如果将返回类型更改为像NSString这样简单的东西,它可以正常工作*

使用NSString的工作示例

现在我已经Array<AnyObject>和其他几个人一起尝试过了,但是我对Swift语法仍然有点新鲜,所以我几乎肯定错过了一些明显的东西.

JAL*_*JAL 5

NSArray *被桥接到Swift as [AnyObject]!(一个隐式解包ArrayAnyObject实例).查看生成的Swift接口[ExampleBase exampleMethod]:

ExampleBase

将方法返回类型更改为[AnyObject]!.

override class func exampleMethod() -> [AnyObject]! {
    return []
}
Run Code Online (Sandbox Code Playgroud)

要在Swift子类中指定可选或具体值,请使用Objective-C nullability说明符:

+ (NSArray * _Nonnull)exampleMethod; 桥梁到 override class func exampleMethod() -> [AnyObject]

+ (NSArray * _Nullable)exampleMethod; 桥梁到 override class func exampleMethod() -> [AnyObject]?

+ (NSArray *)exampleMethod;并且+ (NSArray * _Null_unspecified)exampleMethod;具有相同的行为并且与隐式展开的可选项桥接.