2017-11-03 12 views
1

in den Index setzen. (MacOS, Swift 4), bekomme ich diesen Fehler: "Kann keinen Wert vom Typ '[ String: String] 'mit einem Index vom Typ' NSUserInterfaceItemIdentifier '", wenn ich versuche, die NSTableViewDataSource zu setzen. Es funktionierte gut in Swift 3, aber als ich das Projekt zu Swift 4 aktualisierte, hörte es auf zu arbeiten.Kann einen Wert vom Typ '[String: String]' mit einem Index vom Typ 'NSUserInterfaceItemIdentifier' nicht

Also was ich versuche zu tun, ist die "TableViewData" in der "TableView" durch Verwendung von Zelle ID zu zeigen.

Dies ist mein Code:

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 
     } 
    } 

Jede Idee, was in Swift 4 geändert wurde?

+0

Hinweis: ⌥ Sie auf 'identifier' * zu sehen, was in Swift 4 * – vadian

Antwort

2

NSUserInterfaceItemIdentifier ist ein Strukturtyp. Sie sollten .rawValue rufen den zugrunde liegenden Wert zu erhalten:

tableViewData[row][(tableColumn?.identifier.rawValue)!] 
+0

nun geändert wurde es funktioniert, danke! – CaOs433

Verwandte Themen