【问题标题】: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 原生集合。

标签: ios json swift swift3


【解决方案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]
}

【讨论】:

    猜你喜欢
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    相关资源
    最近更新 更多