Не удается подписать значение типа «[String: String]» с индексом типа «NSUserInterfaceItemIdentifier»

В моем проекте (MacOS, Swift 4) я получаю эту ошибку: "Не удается подписать значение типа "[String: String]" индексом типа "NSUserInterfaceItemIdentifier" при попытке для установки NSTableViewDataSource. Он отлично работал в Swift 3, но когда я обновил проект до Swift 4, он перестал работать.

Итак, что я пытаюсь сделать, это показать «tableViewData» в «tableView», используя идентификатор ячейки.

Это мой код:

    import Cocoa

    class ViewController: NSViewController {

        @IBOutlet weak var tableView:NSTableView!

        let tableViewData = [["picID":"default","nameID":"default","amount":"1","address":"default"],["picID":"default","nameID":"default","amount":"1","address":"default"]]

        override func viewDidLoad() {
            super.viewDidLoad()
            self.tableView.delegate = self as? NSTableViewDelegate
            self.tableView.dataSource = self


        }
    }

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

        func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
            return tableViewData[row][(tableColumn?.identifier)!] // This is where the error appears 
        }
    }

Есть идеи, что изменилось в Swift 4?


person CaOs433    schedule 03.11.2017    source источник
comment
Подсказка: ⌥-нажмите на identifier, чтобы увидеть что изменилось в Swift 4   -  person vadian    schedule 03.11.2017


Ответы (1)


NSUserInterfaceItemIdentifier — это тип структуры. Вы должны вызвать .rawValue, чтобы получить базовое значение:

tableViewData[row][(tableColumn?.identifier.rawValue)!]
person ozgur    schedule 03.11.2017