2016-05-23 45 views
6

我似乎無法重寫下面的方法,並創建了一個讓我困擾了幾個小時的獨立示例。從Swift中覆蓋一個Obj-C類的方法,它返回NSArray

這幾乎可以肯定是愚蠢的東西,但我似乎無法重寫Swift類中的類方法,其中基類是Objective C,特別是返回類型是NSArray*

我剛剛得到的錯誤,「Method does not override any method from its superclass

所以我的失敗如下圖所示:

Error shown, with definition of class and superclass

但它工作正常,如果返回類型更改爲一些簡單的像的NSString *

Working example with NSString

現在我已經試過Array<AnyObject>和p與其他幾個人一起,但我仍然對Swift語法有點新鮮,所以我幾乎肯定會錯過某些明顯的東西。

+0

@Kex怎麼會是解決問題嗎?用戶正試圖實現一個類方法。 – JAL

回答

5

NSArray *被橋接到Swift作爲[AnyObject]!(隱含地解包的ArrayAnyObject實例)。查看生成的斯威夫特接口[ExampleBase exampleMethod]

ExampleBase

你的方法的返回類型更改爲[AnyObject]!

override class func exampleMethod() -> [AnyObject]! { 
    return [] 
} 

要指定您的斯威夫特子類可選的或具體的值,使用Objective-C的空性說明符:

+ (NSArray * _Nonnull)exampleMethod;橋樑override class func exampleMethod() -> [AnyObject]

+ (NSArray * _Nullable)exampleMethod;橋樑override class func exampleMethod() -> [AnyObject]?

+ (NSArray *)exampleMethod;+ (NSArray * _Null_unspecified)exampleMethod;具有相同的行爲並可以通向隱式解包的可選項。

+0

Thx爲答案,我以爲我試過了!但我錯過了!最後。好的提示檢查定義,不知道爲什麼我沒有嘗試。 –

3

解決方案是給編譯器更多關於類型的信息。

在ObjC申報方法

+ (NSArray<NSString *>*)exampleMethod; 

然後斯威夫特你可以寫

override class func exampleMethod() -> [String] 
相關問題