Кажется, что JSON.object
не может быть массивом. Или, по крайней мере, не изменяемый массив. Нам будет трудно определить вашу проблему, не заглядывая в JSON.object
. Быстрое исправление может быть на самом деле
let response1 : NSMutableArray = NSMutableArray.init(array: (JSON.object as! NSArray).value(forKey: "media_list") as! NSArray)
, но я бы попробовал еще немного покопаться. Попробуйте проверить, что именно происходит, и постарайтесь избежать старых объектов Objective- C Next Step (NS). Делайте это шаг за шагом:
let response1: [Any]? = {
guard let mainArray = JSON.object as? [Any] else {
print("Outer object is not an array. Check type of \(JSON.object)")
return nil
}
var mutableVersionOfArray = mainArray // This already creates a mutable copy because we used "var" instead of "let"
guard let mediaList = mutableVersionOfArray.value(forKey: "media_list") as? [Any] else {
print("Inner object is not an array. Check type of \(mutableVersionOfArray.value(forKey: "media_list"))")
return nil
}
return mediaList
}()
Но этот код не имеет смысла для меня. Глядя на ваш код, я ожидаю, что ваш JSON объект выглядит примерно так:
{
"media_list": [{}, {}]
}
, в этом случае вы смотрите словари. Попробуйте следующее:
let mediaList: [Any]? = {
guard let topDictionary = JSON.object as? [String: Any] else {
print("Outer object is not a dictionary. Check type of \(JSON.object)")
return nil
}
guard let mediaListItem = topDictionary["media_list"] else {
print("There is no media_list in payload")
return nil
}
guard let mediaList = mediaListItem as? [Any] else {
print("mediaList is not an array")
return nil
}
return mediaList
}
Надеюсь, вы увидите разницу между массивом и словарем. Массив содержит несколько N упорядоченных элементов, в то время как в словаре есть пары ключ-значение. Таким образом, чтобы получить доступ к значению под ключом, вы называете его dictionary[key]
. Весь ваш код, если вы правы, может быть просто:
let response1 = (JSON.object as? [String: Any])?["media_list"] as? [Any]
, но если он возвращает ноль, может быть немного сложно отладить, что пошло не так.