无法使用类型为"NSUserInterfaceItemIdentifier"的索引下标"[String:String]"类型的值

CaO*_*433 2 swift3 swift4 macos-high-sierra xcode9.1

在我的项目(MacOS,Swift 4)中,我收到此错误:"当我尝试设置NSTableViewDataSource时,无法下载类型'[String:String]'的值,其索引类型为'NSUserInterfaceItemIdentifier'".它在Swift 3中运行得很好,但是当我将项目更新到Swift 4时,它停止了工作.

所以我想要做的是通过使用单元格id在"tableView"中显示"tableViewData".

这是我的代码:

    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 
        }
    }
Run Code Online (Sandbox Code Playgroud)

知道Swift 4中有什么变化吗?

ozg*_*gur 5

NSUserInterfaceItemIdentifier是一种结构类型.您应该调用.rawValue以获取基础值:

tableViewData[row][(tableColumn?.identifier.rawValue)!]
Run Code Online (Sandbox Code Playgroud)