Доступ к данным в структуре для использования в NSTableView - PullRequest
0 голосов
/ 13 февраля 2019

Я довольно новичок в программировании, и я застрял в этом некоторое время.У меня есть структура с именем Patient, которая полна переменных, например, var FIRST: String.

Я уже написал код для извлечения данных из JSON и заполнения этой структуры.Он работает нормально, я могу вызвать print (Patient) и увидеть все данные в консоли.

Экземпляр структуры представляет собой 2d-массив, поэтому при печати в консоль я получаю Patient (FIRST: "Боб ", LAST:" Смит ") Пациент (ПЕРВЫЙ:" Дейв ", LAST:" Эванс ") Пациент (ПЕРВЫЙ:" Лиз ", LAST:" Тейлор ")

Первый метод просмотра таблиц работает нормально ивозвращает счетчик 3.

Во-вторых, я застрял:

Я объявил:

static var globalPatientInstance: [Patient] = []

Затем он заполняется данными из обработчика завершения.Вот второй метод:

extension ViewController: NSTableViewDelegate {

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

    let item = ViewController.globalPatientInstance[row]

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

    cell?.textField?.stringValue = item[(tableColumn?.identifier)!]!

    return cell!
}
}  

Это дает «Тип« Пациент »не имеет нижестоящих элементов»

Однако, если я изменю строку на:

cell?.textField?.stringValue = item.FIRST

Код будет выполнен, и я получу три строки в табличном представлении, каждая из которых будет иметь свое имя - Боб, Дейв, Лиз.

Как правильно получить остальные данные, т.е. item.LASTтакже отображать?

Спасибо за любую помощь, я пробовал так много разных вещей, но я просто застрял на этом.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Я понял это.Спасибо за помощь ребята.Этот метод делает то, что мне нужно:

extension ViewController: NSTableViewDelegate {

fileprivate enum CellIdentifiers {
    static let firstName = "FIRST"
    static let lastName = "LAST"
}

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

    var cellValue: String = ""
    var cellIdentifier: String = ""

    let item = ViewController.globalPatientInstance[row]

    if tableColumn == tableView.tableColumns[0] {
        cellValue = item.FIRST
        cellIdentifier = CellIdentifiers.firstName
    }

    else if tableColumn == tableView.tableColumns[1] {
        cellValue = item.LAST
        cellIdentifier = CellIdentifiers.lastName
    }

    if let cell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: cellIdentifier), owner: nil) as? NSTableCellView {

        cell.textField?.stringValue = cellValue
        //cell.textField?.stringValue = lastName
        return cell
    }
    return nil
}
}
0 голосов
/ 13 февраля 2019

«Тип« Пациент »не имеет подписных элементов» - эта ошибка вызвана тем, что вы пытаетесь получить доступ к пациенту в виде массива.Элемент - это структура, а не массив.

Когда вы говорите, что ваша структура - это двумерный массив, это не имеет смысла.Ваша структура - это структура.Ваш "2D" массив - это просто массив переменных экземпляра структуры.[Пациент] - это одномерный массив.

let item = ViewController.globalPatientInstance[row] // item is now a Patient struct
let cell = tableView.makeView(withIdentifier: (tableColumn!.identifier), owner: self) as? NSTableCellView

cell?.textField?.stringValue = item[(tableColumn?.identifier)!]! // This doesn't work because Patient is not an array, but a struct
cell?.textField?.stringValue = item.FIRST // This works because you are accessing the property of item
cell?.textField?.stringValue = item.LAST // This is to display the LAST property of item

return cell!

}

Примечание. Пожалуйста, назовите свои свойства класса camelCase .. Вы можете использовать этот стиль в качестве справочного пособия для новичка ..

https://github.com/raywenderlich/swift-style-guide

Также - при использовании first и last используются bad соглашения о присвоении имен для свойства, поскольку оно звучит так: first - первый элемент массива.Я бы порекомендовал firstName и lastName.

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