我正在尝试调用一个目标C方法,该方法接受一个使用NSArray回调的块。
我收到以下编译错误:
AnyObject []不是AnyObject []
的子类型[query fetchPlaces:^(NSArray *places, NSError *error) {
}];
夫特
query.fetchPlaces() { (places: AnyObject[], error: NSError) -> Void in
}
答案 0 :(得分:4)
在Objective-C中,所有指针都可以设置为nil
。这意味着places
和error
都可以是nil
。从Objective-C转换为Swift时,您必须考虑到这一点。您必须将places
和error
定义为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
}