Получение данных из структуры для использования в табличном представлении - PullRequest
0 голосов
/ 30 января 2019

Я не могу получить структуру, содержащую переменные, загруженные из JSON, в формат, подходящий для табличного представления.

Я некоторое время возился с этим кодом, много читал, но я 'Я просто застрял.Я могу нормально получать данные с сервера и распечатывать их на консоли.Я заметил, что данные печатаются как KEY: «значение», а не «KEY»: «значение», и это может иметь какое-то отношение к этому.Также, поскольку код прямо сейчас, я могу правильно посчитать количество строк и отобразить значение FIRST в табличном представлении.Я не могу понять, как получить доступ к другим переменным для отображения.Любая помощь с благодарностью!

import Cocoa

class ViewController: NSViewController, NSTableViewDelegate, NSTableViewDataSource {

static var globalPatientInstance: [Patient] = []

var gotJSON: ([Patient], Error?) -> Void = { (patients, error) in
    print("patients from gotJSON: \(patients)")

    globalPatientInstance = patients

    // this returns an error: "Type 'Patient' does not conform to protocol 'Sequence'"
    /*
     for (key, value) in patients[0] {
     println("\(key) -> \(value)")
     tableArray.append(Objects(sectionName: key, sectionObjects: value))
     }
     */
    print("patients from gotJSON: \(globalPatientInstance[0])")
}

@IBOutlet var tableView: NSTableView!
@IBAction func button(_ sender: Any) {
    self.tableView.reloadData()
}


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    self.tableView.delegate = self as NSTableViewDelegate
    self.tableView.dataSource = self

    let url = URL(string: "http://172.16.1.25/backend/returnA")
    let returnA = URLRequest(url: url!)

    retrieveJSON(with: returnA, completionHandler: gotJSON)
    self.tableView.reloadData()
}


func retrieveJSON(with request: URLRequest, completionHandler: @escaping ([Patient], Error?) -> Void) {

    // set up the session
    let config = URLSessionConfiguration.default
    let session = URLSession(configuration: config)

    // make the request
    let task = session.dataTask(with: request as URLRequest) {

        // completion handler argument
        (data, response, error) in

        // completion handler
        guard let data = data else {
            print("Did not recieve data")
            completionHandler([], error)
            return
        }
        do {
            let decoder = JSONDecoder()
            let patients = try decoder.decode(Array<Patient>.self, from: data)
            // print(Patient)
            completionHandler(patients, error)
        }
        catch let err {
            print("Err", err)
            completionHandler([], error)
        }
    }
    task.resume()
}


func numberOfRows(in tableView: NSTableView) -> Int {
    return ViewController.globalPatientInstance.count
}

func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {

    var result: NSTableCellView


    result = tableView.makeView(withIdentifier: (tableColumn?.identifier)!, owner: self) as! NSTableCellView

    result.textField?.stringValue = ViewController.globalPatientInstance[row].FIRST

    return result
}
}

Этот код работает нормально.Массив содержит три структуры, и значение FIRST успешно отображается в табличном представлении при нажатии кнопки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...