проблема с расширением tableview из-за данных JSON

#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'