我需要帮助。从Swift 2.3转换 - > 3.2我收到以下错误。我无法解决此错误。
下面是我的编码内容,我正面临一些问题。
错误:
不能使用String
类型的索引下标NSDictionary类型的值
在这一行:if let tempValue:AnyObject = tempDict["value"] {
if (productToReturn.planoRetailPackSize == nil || productToReturn.planoRetailPackSize == "0.0") {
if let dataToProcess:NSDictionary = dict["data"] as? NSDictionary {
if let productDataRecord:NSDictionary = dataToProcess["productDataRecord"] as? NSDictionary{
if let module:NSArray = productDataRecord["module"] as? NSArray{
for (_,value) in module.enumerated(){
if let parentDic:NSDictionary = value as? NSDictionary{
if let cpmChild:NSDictionary = parentDic["cem:canadaExtensionModule"] as? NSDictionary {
if let tempDict:NSDictionary = cpmChild["retailPackSize"] as? NSDictionary {
if let tempValue:AnyObject = tempDict["value"] { //Error is Here
let myValue: String = String(describing: tempValue)
productToReturn.planoRetailPackSize = myValue
}
}//item
}
}
}
}
}
}
}
请帮帮我。我对iOS很新。无法理解这种类型的错误。
答案 0 :(得分:1)
最好的答案是使用原生的Swift类型。另一种方法是将您的下标转换为NSString
。
...
if let tempValue:AnyObject = tempDict["value" as NSString] {
...
答案 1 :(得分:1)
使用原生类型
if let dataToProcess = dict["data"] as? [String:Any],
let productDataRecord = dataToProcess["productDataRecord"] as? [String:Any],
let module = productDataRecord["module"] as? [[String:Any]] {
for value in module {
if let cpmChild = value["cem:canadaExtensionModule"] as? [String:Any],
let tempDict = cpmChild["retailPackSize"] as? [String:Any],
let myValue = tempDict["value"] as? String {
productToReturn.planoRetailPackSize = myValue
}
}
}
注意:在for
循环中myValue
将在每次迭代中覆盖planoRetailPackSize
。这很可能不是故意的。