【问题标题】:Value of type 'JSON' has no member 'arrayOf'“JSON”类型的值没有成员“arrayOf”
【发布时间】:2018-05-07 22:05:19
【问题描述】:

我正在将代码从 Swift 2 迁移到 Swift 4。以下代码在 Swift 2 中运行良好,但在 Swift 4 中出现错误:

let unorderedComments = try? json.arrayOf("comments", type: Comment.self)

错误:

“JSON”类型的值没有成员“arrayOf”

有谁知道如何摆脱这个错误?

编辑:
我使用 Freddy 库进行 JSON 解析

【问题讨论】:

  • 这里没有太多的上下文,但现在可能是 json.array(of: "cmets"....)
  • 你运行 Xcode Swift 转换器了吗?
  • json 的对象类型是什么?
  • 这里的json 是什么?您在这里使用过任何特定的库吗?
  • @staticVoidMan 我使用 Freddy 库进行 JSON 解析

标签: json swift swift4


【解决方案1】:

“JSON”类型的值没有成员“arrayOf”

错误明确指出对象JSON 没有任何arrayOf 方法。

你后来说这个对象是一个Freddy JSON 对象。 (您应该在一开始就将其添加到您的问题中)

现在,您正在将代码从 Swift v2 迁移到 v4。这是一个巨大的飞跃,因此在遇到障碍时,首先应该做的是检查文档,尤其是在您的情况下,查看是否有 arrayOf 方法或是否已更改,以及类似的选项现已上市。


无论如何,根据文档,Freddy 有一个 getArray(at:),我相信随着时间的推移,它已经取代了 arrayOf(_:type:)

以下应该可以解决此问题:

let unorderedComments = try? json.getArray(at:"comments")

注意:上述函数采用可变参数;即,如果您想要一个路径,它可以采用多个字符串。
json.getArray(at:"rootKey",1,"nestedKey") 之类的内容类似于 json["rootKey"][1]["nestedKey"]


PS:由于您是从 v2 升级到 v4,这不会是唯一需要处理的错误。
只需遵循相同的想法并修复您的其他错误即可。
如果您遇到困难,我们随时为您提供帮助
:)

【讨论】:

    【解决方案2】:

    我假设您有一个 cmets 数组(其中包含字典)。

    以下内容应该可以帮助您入门:

    var results: [String: AnyObject]? = nil
    do {
        results = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String: AnyObject]
        // Now try to extract data:
        guard let results = results else {
            let userInfo = [NSLocalizedDescriptionKey: "Failed to get any results"]
            let error = NSError(domain: "<whatever error name>", code: 1, userInfo: userInfo)
            return error
        }
        // get comment
        guard let dictionary = results[Parse.JSONResponseKeys.<Responsekey>] as? [[String: AnyObject]] else {
            let userInfo = [NSLocalizedDescriptionKey: "Failed to get list"]
            let error = NSError(domain: "<whatever error name>", code: 1, userInfo: userInfo)
            return error
        }
        // process the array
        if dictionary.count > 0 {
            // get the 1st element
            comment = Comment.init(dictionary: dictionary.first!)
            // if you know you have more than one... you can put this in a loop
            return comment
        } else {
            return null
        }
    } catch {
        //How ever you want to catch error
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 2016-03-11
      • 1970-01-01
      • 1970-01-01
      • 2021-06-17
      • 2018-01-15
      相关资源
      最近更新 更多