“[AnyObject]”与“NSArray”不同

时间:2014-07-19 00:21:24

标签: objective-c swift ios8

过去使用的Objective-c函数的签名是:

- (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 个答案:

答案 0 :(得分:2)

找到我的两个问题的答案 -

1)由于NSArray是不可变的,并且[AnyObject]在Swift中是可变的数组类型,编译器抱怨它们不相同。我改变了NSArray!到阵列!在Swift代码中。其他选择是将ObjC代码更改为,成功:( void(^)(NSMutableArray * response))成功(不首选,因为它杀死了使用桥的目的)。

2)在调用Obj C中的块之前将数组转换为NSMuatable数组。