我目前正在尝试将我的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试图在这里告诉我什么?
答案 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
}
})
}