Значение типа 'JSON' не имеет члена 'arrayOf' - PullRequest
0 голосов
/ 08 мая 2018

Я перемещаю код из Swift 2 в Swift 4. Следующий код хорошо работает в Swift 2, но выдает ошибку в Swift 4:

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

Ошибка:

Значениетипа 'JSON' не имеет члена 'arrayOf'

Кто-нибудь знает, как избавиться от этой ошибки?

РЕДАКТИРОВАТЬ:
Я использовал Фредди библиотека для разбора JSON

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Значение типа 'JSON' не имеет члена 'arrayOf'

Ошибка ясно указывает на то, что у объекта JSON нет метода arrayOf.

Позже вы заявили, что этот объект является Freddy JSON объектом. (Вы должны были добавить это к своему вопросу в самом начале)

Теперь в вашем случае вы переносите код из Swift v2 в v4. Это огромный скачок, поэтому в тех случаях, когда кто-то сталкивается с препятствием, первое, что нужно сделать, это проверить документацию, и особенно в вашем случае, посмотреть, есть ли метод arrayOf или он изменился, и какие аналогичные параметры теперь доступны.


В любом случае, согласно документации, Фредди имеет getArray(at:), который, я считаю, со временем заменил arrayOf(_:type:).

Следующая проблема должна решить эту проблему:

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

ПРИМЕЧАНИЕ. Приведенная выше функция принимает переменный параметр; т. е. может потребоваться несколько строк, если вам нужен своего рода путь.
Что-то вроде json.getArray(at:"rootKey",1,"nestedKey") будет похоже на json["rootKey"][1]["nestedKey"]


PS: поскольку вы переходите с версии v2 на версию v4, это будет не единственная ошибка, с которой нужно иметь дело.
Просто следуйте той же идее и исправьте другие ошибки.
Если вы застряли, мы здесь, чтобы помочь
:)

0 голосов
/ 08 мая 2018

Я предполагаю, что у вас есть массив комментариев (которые содержат словарь).

Начинается следующее:

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...