过去使用的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
})
请帮我弄清楚这有什么问题?
答案 0 :(得分:2)
找到我的两个问题的答案 -
1)由于NSArray是不可变的,并且[AnyObject]在Swift中是可变的数组类型,编译器抱怨它们不相同。我改变了NSArray!到阵列!在Swift代码中。其他选择是将ObjC代码更改为,成功:( void(^)(NSMutableArray * response))成功(不首选,因为它杀死了使用桥的目的)。
2)在调用Obj C中的块之前将数组转换为NSMuatable数组。