【问题标题】:Swift 3 Migration: Generic parameter 'Element' could not be inferredSwift 3 迁移:无法推断通用参数“元素”
【发布时间】:2016-10-05 22:00:46
【问题描述】:

arrayOfDicts 被声明为

let accelManager = CMSensorRecorder()
let motionManager = CMMotionManager()
var arrayOfDicts:[NSDictionary] = []

函数定义为

    func startMotionManager() {
    WKInterfaceDevice.current().play(.start)
    self.arrayOfDicts = []
    if motionManager.isAccelerometerAvailable {
        motionManager.accelerometerUpdateInterval = 0.01
        let handler:CMAccelerometerHandler = {(data: CMAccelerometerData?, error: NSError?) -> Void in
            self.arrayOfDicts.append([
                "timestamp":data!.timestamp,
                "x":data!.acceleration.x,
                "y":data!.acceleration.y,
                "z":data!.acceleration.z
                ])
            //print("timestamp: ", data!.timestamp, ", x: ", data!.acceleration.x, ", y: ", data!.acceleration.y, ", z: ", data!.acceleration.z)
        }
        motionManager.startAccelerometerUpdates(to: OperationQueue(), withHandler: handler)
    }
}

错误发生在“let handler”行。

"无法推断通用参数'元素' 调用函数'append'"

我做了一些探索,并认为这是因为编译器不确定数组“arrayOfDicts”是什么类型的......但我可能会走得很远。任何有关该主题的帮助和/或教育将不胜感激。

-马特

【问题讨论】:

  • 如果字典总是有相同的 4 个键,你为什么还要使用它们?

标签: swift xcode generics apple-watch


【解决方案1】:

闭包类型CMAccelerometerHandler已更改为:

public typealias CMAccelerometerHandler = (CMAccelerometerData?, Error?) -> Swift.Void

(来自“CMMotionManager.h”的生成头文件。)

尝试将该行中的NSError? 更改为Error?

您有时可能需要将“无法推断”之类的错误消息视为“可能存在某些类型相关的错误”。发送 bug report 以宣传 Apple(或 swift.org)以改进此类诊断。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    相关资源
    最近更新 更多