Swift - AnyObject []不是AnyObject []的子类型?

时间:2014-07-26 16:08:12

标签: objective-c swift objective-c-blocks

我正在尝试调用一个目标C方法,该方法接受一个使用NSArray回调的块。

我收到以下编译错误:

AnyObject []不是AnyObject []

的子类型
[query fetchPlaces:^(NSArray *places, NSError *error) {

}];

夫特

query.fetchPlaces() { (places: AnyObject[], error: NSError) -> Void in

}

2 个答案:

答案 0 :(得分:4)

在Objective-C中,所有指针都可以设置为nil。这意味着placeserror都可以是nil。从Objective-C转换为Swift时,您必须考虑到这一点。您必须将placeserror定义为Optionals,以说明它们可以是nil

query.fetchPlaces() { (places: AnyObject[]?, error: NSError?) -> Void in

}

如果您确定places永远不会nil。您也可以将其声明为Implicitly Unwrapped Optional,让您将其视为不可选:

query.fetchPlaces() { (places: AnyObject[]!, error: NSError?) -> Void in

}

注意:您必须使用旧版本的测试版(1或2)。您应该更新到最新的测试版。数组现在声明为[SomeType]而不是SomeType[]

答案 1 :(得分:3)

在objective-c中,任何对象都可以为nil,但在Swift中必须明确声明。在将ObjC转换为Swift时,所有Objective-C对象都成为选项。尝试:

query.fetchPlaces() { (places: AnyObject[]?, error: NSError?) -> Void in

} 
相关问题