循环内变量的类转换
Posted
技术标签:
【中文标题】循环内变量的类转换【英文标题】:Class cast of the variable inside loop 【发布时间】:2017-04-03 21:58:37 【问题描述】:我有一个简单的 json:
"someparam1":[1,2,3],"someparam2":[1,2,3],...
为了解析,我使用了这段代码:
guard let json = try JSONSerialization.jsonObject(with: data, options: []) as? NSDictionary else return
for key in json.allKeys
guard let array = json[key] as? [Int] else return
minemap[key] = array
fileprivate var minemap: [String : [Int]] = [:]
但是编译器说minemap[key]
不正确!
所以我想将key
转换为String
。但是做这样的事情最漂亮的解决方案是什么:
for key as? String in json.allKeys
?
【问题讨论】:
为什么是NSDictionary
?使用正确类型的正确 Swift 字典。
什么是minemap
?您的问题涉及transitmap
。
@rmaddy ,已修复。你会建议如何解析 json?
@rmaddy ,我只使用过 NSDictionary
打开 Swift 书籍,了解 Swift 原生集合。
【参考方案1】:
您可以只使用[String: [Int]]
而不是NSDictionary
,施放一次并避免所有进一步的施放。
guard let json = try JSONSerialization.jsonObject(with: data, options: []) as?[String: [Int]] else return
minemap = json
如果不是所有值都具有[Int]
类型,这可能不起作用。如果是这种情况,请改用 [String: Any]
并稍后转换值。
guard let json = try JSONSerialization.jsonObject(with: data, options: []) as?[String: Any] else return
for (key, value) in json
minemap[key] = json[key] as? [Int]
【讨论】:
以上是关于循环内变量的类转换的主要内容,如果未能解决你的问题,请参考以下文章