我的代码出现了这个错误:
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中,这段代码完美无缺。
感谢任何帮助:-)
答案 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)
}
这对我有用