Для начала я бы поставил точку останова и посмотрел, как выглядит ваш объект ответа с любой конечной точки, на которую вы попали.Возможно, это действительно первые три элемента массива?
Переходя к рассмотрению вопроса, я бы использовал протокол Codable
для расшифровки вашего ответа.Я пропущу часть Alamofire и сосредоточусь исключительно на расшифровке объекта.Используя ваш пример, вот как будет выглядеть структура:
struct ResponseObject: Codable {
let name: String
let location: String
}
Я бы не использовал в своем коде оператор bang (!
), так как вы выдадите исключение, если сообщите компилятору, что это100% гарантированных денег в банке объект не ноль и это на самом деле.Вместо этого разверните необязательные параметры.
Вам понадобится целевая точка для ваших декодированных данных, чтобы вы могли объявить пустой массив ответов следующим образом:
var arrayOfObjects: [ResponseObject] = []
Затем выпросто объявите декодер и декодируйте свои данные:
let decoder = JSONDecoder()
do {
if let data = rawData {
arrayOfObjects = try decoder.decode([ResponseObject].self, from: data)
print("number of objects:", arrayOfObjects.count)
let slice = arrayOfObjects.prefix(3)
arrayOfObjects = Array(slice)
print("number of objects after slicing the array:", arrayOfObjects.count)
}
} catch {
print(error)
}
Вместо того, чтобы проходить по массиву, просто захватите первые три элемента массива с помощью .prefix(3)
.Поигравшись с этим только сейчас, я попытался добавить к первым 10 элементам массива префикс с 4, и он не сгенерировал исключение, поэтому я думаю, что это должно сработать без предварительной проверки счетчика массива.
Я быПредлагаем взглянуть на документацию Swift онлайн по Re: Arrays или вы можете получить довольно симпатичное приложение для Mac OS под названием Dash, которое позволяет загружать наборы документов для нескольких языков на вашем компьютере локально.
Удачи!