无法转换类型'值'预期的论证类型'论证'

时间:2015-12-15 22:08:26

标签: xcode swift swift2

我目前正在尝试将我的Swift iOS应用程序转换为Swift 2.我已经删除了99%的编译器错误,但这个仍然存在:

  

无法转换类型'(CMAltitudeData!,NSError!)的值 - >虚空'至   预期参数类型' CMAltitudeHandler' (又名   '(可选,可选) - > ()&#39)

这是对这个功能的回应:

func startAltimeterUpdate() {
    self.altimeter.startRelativeAltitudeUpdatesToQueue(NSOperationQueue.currentQueue()!,
        withHandler: { (altdata:CMAltitudeData!, error:NSError!) -> Void in
            self.handleNewMeasure(pressureData: altdata)
    })
}

我很难理解这个错误...... Xcode试图在这里告诉我什么?

2 个答案:

答案 0 :(得分:2)

这很容易。

- 点击Promise.settle = function(array) { var reflects = []; if (array) { reflects = array.map(function(item) { // if it's a promise with .reflect(), call `.reflect()` if (typeof item.then === "function" && typeof item.reflect === "function") { return item.reflect(); } else { // cast into a promise and call .reflect() return Promise.resolve(item).reflect(); } }); } return Promise.all(reflects); } 以获取该符号的文档。

您将看到startRelativeAltitudeUpdatesToQueue处理程序被声明为

CMAltitudeHandler

这两个参数都是可选的CMAltitudeHandler = (CMAltitudeData?, NSError?) -> Void ,而不是隐式展开的可选?

这就是错误信息所说的内容。

答案 1 :(得分:1)

您正在尝试强制将可选项变为非可选项。斯威夫特并不喜欢这样。相反,试试这个:

func startAltimeterUpdate() {
    self.altimeter.startRelativeAltitudeUpdatesToQueue(NSOperationQueue.currentQueue()!,
        withHandler: { (altdata, error) -> Void in
            if let data = altdata {
                self.handleNewMeasure(pressureData: data)
            } else {
                // altdata is nil
            }
    })
}