循环内变量的类转换

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]

【讨论】:

以上是关于循环内变量的类转换的主要内容,如果未能解决你的问题,请参考以下文章

Python的类成员变量默认初始值的坑

将对象转换为存储在变量中的类

js 如何保存循环内的变量,然后循环外使用这个变量?

面试题

Ruby,在 While 循环内,将字符串转换为方法调用

SAS 对变量进行组内编号、循环编号、递增编号和有限重复循环编号