Как я могу распечатать все соответствующие элементы массива, полученные из API, в виде меток в ячейке табличного предстаIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу распечатать все соответствующие элементы массива, полученные из API, в виде меток в ячейке табличного предста

Сообщение Anonymous »

Моя модель такая;

Код: Выделить всё

import Foundation

struct TimeStamp: Decodable
{
let status : String
let message: String
let zones: [Zone]
}

struct Zone: Decodable
{
let countryCode : String
let countryName : String
let zoneName: String
let gmtOffset : Int
let timestamp : Int
}
TimeStampViewModel

Код: Выделить всё

import Foundation
import RxSwift
import RxCocoa

class TimeStampViewModel
{
let timeStamps : PublishSubject = PublishSubject()
let error : PublishSubject = PublishSubject()
let loading : PublishSubject = PublishSubject()

func requestData()
{
self.loading.onNext(true)
let url = URL(string: "http://api.timezonedb.com/v2.1/list-time-zone?key=QQFJMAE732I4&format=json")!
WebService().downloadTimeStamp(url: url)
{
result in
self.loading.onNext(false)
switch result
{
case.success(let timeStamps):
self.timeStamps.onNext(timeStamps)
case.failure(let error):
switch error
{
case.parsingError:
self.error.onNext("Parsing Error")
case.serverError:
self.error.onNext("Server Error")
}
}
}
}
}
Веб-сервис

Код: Выделить всё

import Foundation

enum TimeStampError : Error
{
case serverError
case parsingError
}

class WebService
{
func downloadTimeStamp(url: URL, completion: @escaping (Result) -> ())
{
URLSession.shared.dataTask(with: url)
{
data, response, error in

if let _ = error
{
completion(.failure(TimeStampError.serverError))
}

else if let data = data
{
let timeStampList = try? JSONDecoder().decode(TimeStamp.self, from: data)

if let timeStampList = timeStampList
{
completion(.success([timeStampList]))
}
else
{
completion(.failure(.parsingError))
}
}
}.resume()
}
}
CountryHoursVC ViewController

Код: Выделить всё

import UIKit
import RxSwift
import RxCocoa

class CountryHoursVC: UIViewController, UITableViewDelegate
{
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var indicatorView: UIActivityIndicatorView!

let timeStampVM = TimeStampViewModel()
let disposeBag = DisposeBag()

var timeStampList = [TimeStamp]()

override func viewDidLoad()
{
super.viewDidLoad()
// Do any additional setup after loading the view.

view.backgroundColor = .black
tableView.rx.setDelegate(self).disposed(by: disposeBag)
setupBindings()
timeStampVM.requestData()
}

private func setupBindings()
{
timeStampVM.loading.bind(to: self.indicatorView.rx.isAnimating).disposed(by: disposeBag)

timeStampVM.error.observe(on: MainScheduler.asyncInstance).subscribe
{
errorString in
print(errorString)
}.disposed(by: disposeBag)

timeStampVM.timeStamps.observe(on: MainScheduler.asyncInstance).bind(to: tableView.rx.items(cellIdentifier: "CountryHourCell", cellType: CountryHourTableViewCell.self))
{
row, item, cell in
cell.item = item
}.disposed(by: disposeBag)
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) ->  CGFloat
{
return 70
}
}
CountryHourTableViewCell

Код: Выделить всё

import UIKit

var countryList = [String]()

class CountryHourTableViewCell: UITableViewCell
{
@IBOutlet weak var countryNameLabel: UILabel!
@IBOutlet weak var hourLabel: UILabel!

override func awakeFromNib()
{
super.awakeFromNib()
// Initialization code
}

override func setSelected(_ selected: Bool, animated: Bool)
{
super.setSelected(selected, animated: animated)

// Configure the view for the selected state
}

public var item : TimeStamp!
{
didSet
{
countryNameLabel.text = item.zones.first?.countryName
let date = Date(timeIntervalSince1970: TimeInterval(item.zones.first?.timestamp ?? 0))

// Saat dilimini HH:mm formatında ayarla
let formatter = DateFormatter()
formatter.dateFormat = "HH:mm"
hourLabel.text = formatter.string(from: date)
}
}
}

Я поместил данные, полученные с помощью jsondecode, в массив зон. Я хочу напечатать названия стран и временные метки в массиве зон с помощью DidSet{} в ячейке tableview, но я могу записать только первый или последний элемент массива. Есть ли возможность записать их все ячейку за ячейкой?
Мое приложение выглядит так
Я ожидаю, что произойдет именно такой стиль реализация

Подробнее здесь: https://stackoverflow.com/questions/786 ... api-as-lab
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»