不能使用String类型的索引为NSDictionary类型的值添加下标,从Swift 2.3转换到3.2时

wlzqhblo  于 2022-11-06  发布在  Swift
关注(0)|答案(2)|浏览(203)

我需要帮助。虽然转换从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非常陌生。无法理解这种类型的错误。

2ekbmq32

2ekbmq321#

使用本机类型

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。这很可能不是预期的。

mtb9vblg

mtb9vblg2#

最好的答案是使用原生Swift类型,另一种方法是将下标转换为NSString

...
if let tempValue:AnyObject = tempDict["value" as NSString]  {
...

相关问题