Я работаю над проектом для домашних животных, где сериализую JSON, используя класс JSONSerialization
и jsonObject(with:options:)
.Объект не может быть использован до тех пор, пока не будет приведен в словарь [String: Any]
или массив [Any]
.Вот где возникает несоответствие.Ниже приведен метод из одного из моих классов.Входные данные проверены и действительны.
private static func parse(data: Data) -> [JSONDictionary]? {
do {
let options = JSONSerialization.ReadingOptions() // rawValue = UInt 0
let otherOptions: JSONSerialization.ReadingOptions = [] // rawValue = UInt 0
let jsonAny = try JSONSerialization.jsonObject(with: data, options: otherOptions)
if let array = jsonAny as? [String: Any] {
print(array)
}
} catch {
return nil
}
return nil
}
Оба объекта ReadingOption
являются действительными и выдают действительный вывод, который можно правильно преобразовать, и вызывается print(array)
.
Однакокогда я использую следующее, неверный вывод возвращается и не может быть приведен правильно.Примечание options
в вызове jsonObject
имеет эквивалентное значение otherOptions
в приведенном выше примере.
private static func parse(data: Data) -> [JSONDictionary]? {
do {
let jsonAny = try JSONSerialization.jsonObject(with: data, options: [])
if let array = jsonAny as? [String: Any] {
print(array) // never called
}
} catch {
return nil
}
return nil
}
Я подумал, потому что они имеют эквивалентные значения, которые я мог бы использовать их вместо друг друга.Но это не тот случай.Это ошибка, или я использую это неправильно?
Редактировать: здесь используется набор данных https://www.govtrack.us/api/v2/role?current=true&role_type=senator