#ios #json #swift #uitableview #collapse
#iOS #json #swift #uitableview
Вопрос:
я создаю Swift
приложение, а внутри приложения я реализую UITableView
функциональность свертывания / расширения, и я настраиваю статические данные в tableview и их успешное отображение, но когда я пытаюсь загрузить, JSON
чем я сталкиваюсь с проблемой, вот мой код и структура модели
вот модель для анализа JSON
public struct Item {
var service: String
var service_price: Int
var barber_service_id: Int
var service_duration: Int
public init(service: String, service_price: Int,barber_service_id: Int,service_duration: Int) {
self.service = service
self.service_price = service_price
self.barber_service_id = barber_service_id
self.service_duration = service_duration
}
}
public struct Section1 {
var name: String
var items: [Item]
var collapsed: Bool
public init(name: String, items: [Item], collapsed: Bool = false) {
self.name = name
self.items = items
self.collapsed = collapsed
}
}
Вот как я заполняю tableview статическими данными
public var sectionsData: [Section1] = [
Section1(name: "Beard", items: [Item(service: "Beard Trim", service_price: 1, barber_service_id: 1, service_duration: 30),Item(service: "Beard Line Up", service_price: 1, barber_service_id: 1, service_duration: 30)], collapsed: true)
]
как вы можете видеть в статическом коде, я добавил два элемента в Item
массив, и теперь вот мой код, который я пытаюсь реализовать с JSON
данными
service.array?.forEach({ (sList) in
let item = Item(service: sList["service"].stringValue, service_price: sList["service_price"].intValue, barber_service_id: sList["barber_service_id"].intValue, service_duration: sList["service_duration"].intValue)
let sections = Section1(name: category_name, items: [item], collapsed: true)
self.sections.append(sections)
})
как вы можете видеть в моем коде, я извлекаю JSON
данные для каждого цикла, но теперь, как и в статическом коде, я могу добавлять несколько элементов, так как это сделать при использовании динамических данных
кто-нибудь может мне помочь с этим
Ответ №1:
Создайте экземпляр var для хранения вашего источника данных.
var sectionsData: [Section1] = []
Создайте раздел (ы) из ответа API
guard let array = service.array else {
return
}
let newSections: [Section1] = array.map { (sList) in
let item = Item(service: sList["service"].stringValue, service_price: sList["service_price"].intValue, barber_service_id: sList["barber_service_id"].intValue, service_duration: sList["service_duration"].intValue)
return Section1(name: category_name, items: [item], collapsed: true)
}
Добавьте эти новые данные в ваш экземпляр var
sectionsData.append(contentsOf: newSections)
Перезагрузите данные таблицы (в основном потоке)
Комментарии:
1. Спасибо, но я получаю ошибку после попытки вашего кода
Generic parameter 'T' could not be inferred
видите, я отредактировал ваш ответ, в котором я получаю ошибку2. Извините, я написал этот код в stackoverflow. Добавьте тип для новостных разделов. Я обновлю код.
3. Хорошо, я пытаюсь найти информацию об этом, но не могу решить эту ошибку, пожалуйста, помогите мне в этом
4. снова я получаю эту ошибку
Value of optional type '[Section1]?' must be unwrapped to a value of type '[Section1]'
5. также возникает эта ошибка после использования map
Cannot convert value of type 'Int' to expected argument type 'String'