对成员'下标'的模糊引用

时间:2016-08-24 18:12:22

标签: macos swift3

我的代码出现了这个错误:

func getBatteryInfos(){
    let snapshot = IOPSCopyPowerSourcesInfo().takeRetainedValue()

    // Pull out a list of power sources
    let sources = IOPSCopyPowerSourcesList(snapshot).takeRetainedValue() as Array

    // For each power source...
    for ps in sources {
        // Fetch the information for a given power source out of our snapshot
        let info = IOPSGetPowerSourceDescription(snapshot, ps).takeUnretainedValue() as Dictionary

        // Pull out the capacity
        if let

            capacity = info[kIOPSCurrentCapacityKey] as? Double, //Ambiguous reference to member 'subscript'
             let charging = info[kIOPSIsChargingKey] as? Int{ //Ambiguous reference to member 'subscript'

                batteryPercentage = capacity
                batteryState = charging

                print("Current battery percentage \(batteryPercentage)")
                print("Current state \(batteryState)")



        }
    }

我尝试将info[kIOPSCurrentCapacityKey]替换为info["kIOPSCurrentCapacityKey"]但发生了同样的错误。 我在StackOverflow上看到了一些关于这个错误的问题,但所有的答案都不适用于我的代码。

我正在使用Xcode 8 Beta 6和Swift3。在Swift 2中,这段代码完美无缺。

感谢任何帮助:-)

2 个答案:

答案 0 :(得分:19)

您无法转换为无类型的Swift词典或数组。变化

as Dictionary
as Array

as NSDictionary
as NSArray

或者,如果您知道实际类型(即这是 的数组这是什么?的字典),请转换为实际类型。

另一种方法是使用新的无类型类型[Any][AnyHashable:Any]。但根据我的经验,这可能有点棘手。基本上Apple已经吹走了Objective-C和Swift之间的自动桥接,并将其替换为" permissive boxing",这会导致一些类型不匹配,你必须自己补偿。

答案 1 :(得分:0)

我发现了这个

我遇到了同样的问题

    if let paymentDict = dict["payment"] as? Dictionary
    {
        self.payment = OrderPayment(dict: paymentDict)
    }

然后我添加更多特定类型的词典

    if let paymentDict = dict["payment"] as? Dictionary<String,AnyObject>
    {
        self.payment = OrderPayment(dict: paymentDict)
    }

这对我有用