不能使用 String 类型的索引为 NSDictionary 类型的值下标。从 Swift 2.3 -> 3.2 转换时
Posted
技术标签:
【中文标题】不能使用 String 类型的索引为 NSDictionary 类型的值下标。从 Swift 2.3 -> 3.2 转换时【英文标题】:Cannot subscript a value of type NSDictionary with an index of type String. While converting from Swift 2.3 -> 3.2 【发布时间】:2018-11-23 23:16:03 【问题描述】:我需要帮助。从 Swift 2.3 -> 3.2 转换时,我收到以下错误。我无法解决此错误。
以下是我的编码资料,我遇到了一些问题。
错误:
不能用字符串类型的索引为 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 很陌生。无法理解此类错误。
【问题讨论】:
不要在 Swift 中使用 NS 类,例如 NSDictionary。使用Dictionary
或[String: Any]
...并且不要注释编译器可以推断的类型。
@vadian plz 你能帮我吗...我无法解决它。
tempValue
应该是什么(静态)类型?当然不是 AnyObject
请检查我更新的任务。我已经粘贴了所有代码
【参考方案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
。这很可能不是故意的。
【讨论】:
嗨@vadian 你能帮我解决这个问题吗:***.com/q/50855040/9940506【参考方案2】:最好的答案是使用原生 Swift 类型。另一种方法是将您的下标转换为NSString
。
...
if let tempValue:AnyObject = tempDict["value" as NSString]
...
【讨论】:
以上是关于不能使用 String 类型的索引为 NSDictionary 类型的值下标。从 Swift 2.3 -> 3.2 转换时的主要内容,如果未能解决你的问题,请参考以下文章
不能为“[(String)] 类型的值下标?”具有“Int”类型的索引
无法使用“String”类型的索引为“[[String : Any]]”类型的值下标
无法使用“Int”类型的索引为“[String : String]”类型的值下标