使用Swift3中的完成处理程序调用Objective C方法(完成是IUO吗?)

时间:2016-11-09 06:46:41

标签: swift swift3

所以我终于开始做我的Swift3转换了。我有很多以下错误,因为我们有一个用ObjC编写的遗留代码库。

ObjC的定义如下:

-(void)getRecommendationHintsWithCompletion:(void(^)(NSArray *recommendationHints, NSError *error))completion;
在Swift 2.2中,我们称之为:

manager.getRecommendationHints { (hints:[AnyObject]!, error: NSError!) in
    //code
})

swift 3迁移器运行后,那段快速代码没有改变,但我得到了错误:

Cannot convert value of type '([AnyObject]!, NSError!) -> ()' to expected argument type '(([Any]?, Error?) -> Void)!'

所以我试过了:

manager.getRecommendationHints { (hints:[Any]?, error: Error?) in
    //code
})

但我仍然得到:

Cannot convert value of type '([AnyObject]?, Error?) -> ()' to expected argument type '(([Any]?, Error?) -> Void)!'

看起来预期的争论中有一个Implicity Unwrapped Optional,但我不知道如何解决这个问题。

我该怎么办?谢谢!

1 个答案:

答案 0 :(得分:1)

尝试使用Error代替NSError

manager.getRecommendationHints { (hints:[Any]?, error: Error?) in
    //code
}

希望这可以解决您的问题