2014-07-19 25 views
1

簽名一個目標c函數我已經在過去使用的是:「[AnyObject]」是不相同的「的NSArray」

- (MMCall *)getLocalizedAppCategoriesWithOptions:(MMOptions *)options 
          success:(void (^)(NSArray *response))success 
          failure:(void (^)(NSError *error))failure; 

我使用稱其爲 -

[[whateverclassname new] getLocalizedAppCategoriesWithOptions:nil 
                 success:^(NSArray *response) { 
    } failure:[^(NSError *error) { 
} 

它返回一個NSArray對象。這些對象的父類是NSObject,它們的屬性很少。 在用swift進行實驗時,我使用相應的頭文件更新了橋接頭文件。問題是 -

1)如果我把它下面的方式,我得到編譯錯誤是「‘[AnyObject]’不等同於‘的NSArray’」

whateverclassname().getLocalizedAppCategoriesWithOptions(nil, success: {(response : NSArray!) in 
    }, failure: {(error: NSError!) in 
}) 

2)如果我把它下面的方式,它編譯成功,但在應用程序崩潰在運行時 -

whateverclassname().getLocalizedAppCategoriesWithOptions(nil, success: {(response : [AnyObject]!) in 
    }, failure: {(error: NSError!) in 
}) 

請幫我找出這有什麼問題?

+1

你得到什麼消息,當它崩潰前擋? – nhgrif

+0

這裏沒有味精。但是線程在[_NSArrayM insertObjectAtindex:] – Avi

+0

之後顯示objc_exception_throw可能是相關的:http://stackoverflow.com/questions/24113354/swift-array-element-cannot-be-bridged-to-objective-c/24113484#24113484 – BergQuester

回答

2

找到答案,我的兩個問題 -

1)由於NSArray的是不可改變的,[AnyObject]是斯威夫特數組類型是可變的,編譯器抱怨他們是不相同的。我改變了NSArray!陣列!在Swift代碼中。其他選擇是將ObjC代碼更改爲成功:(void(^)(NSMutableArray * response))成功(不優選,因爲它會殺死使用該橋的目的)。

2)鑄造的陣列到陣列NSMuatable調用的OBJ C.

相關問題