Ошибка ясно говорит о том, что _data
- кстати, переменные с начальным подчеркиванием очень target-c-ish - это Any
, поэтому вы должны условно понижать уже этот тип.если ожидаемый тип является словарем, рассмотрите возможность использования более конкретной Result<[String:Any]>
.
Пожалуйста, прочитайте JSON.Это довольно легко.Существует только два типа коллекции: массив ([]
) и словарь ({}
), поэтому значение для ключа data
является массивом, а значение для ключа attributes
является словарем
ИПожалуйста, соблюдайте соглашение об именах, что переменные начинаются со строчной буквы и не используют NSArray
и NSDictionary
в Swift.
switch response.result {
case .Success(let response):
if let response = response as? [String:Any],
let data = response["data"] as? [[String:Any]] {
for item in data {
if let attributes = item["attributes"] as? [String:Bool],
let isCurrentSeason = attributes["isCurrentSeason"], isCurrentSeason == true {
currentSeasonID = isCurrentSeason
break // add this to exit the loop immediately if the item was found
}
}
}
default:
break
}
Однако я предполагаю, что currentSeasonID
должен быть id
значение вместо логического isCurrentSeason
case .Success(let response):
if let response = response as? [String:Any],
let data = response["data"] as? [[String:Any]] {
for item in data {
if let identifier = item["id"] as? String,
let attributes = item["attributes"] as? [String:Bool],
let isCurrentSeason = attributes["isCurrentSeason"], isCurrentSeason == true {
currentSeasonID = identifier
break // add this to exit the loop immediately if the item was found
}
}
}
default:
break
}