2016-12-05 54 views
0

我有這個奇怪的錯誤消息,在我的TableViewController類不能下標類型的值「INOUT [菜單項]」(又名「INOUT陣列<MenuItem>」)

class MenuTableViewController: UITableViewController { 
fileprivate var menuItems = [MenuItem]() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.tableView.register(UINib(nibName: "MenuItemTableViewCell", bundle: nil), forCellReuseIdentifier: CELL_MENU_ITEM) 
} 

// MARK: - Table view data source 

override func numberOfSections(in tableView: UITableView) -> Int { 
    return 1 
} 

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return menuItems.count 
} 

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: CELL_MENU_ITEM, for: indexPath) as! MenuItemTableViewCell 

    // this line throws the error message 
    if let menuItem = self.menuItems[indexPath.row].getTitle() as [MenuItem] { 
     cell.itemTitleLabel.text = menuItem 
    } 


    return cell 
} 

func setMenuItems(menuItems: [MenuItem]) { 
    self.menuItems = menuItems 
}  
} 

我完全不知道是什麼錯誤的手段。還有其他人正在用type inout來面對這個問題,但他們正在用'='而不是'=='和類似的東西來做錯誤。順便說一句,menuItems的值在完成函數中的另一個類中被設置。但是,如果我從那裏刪除它,我仍然有這個錯誤。

回答

1

由於menuItems被聲明爲一個具體的非可選類型沒有類型轉換也不需要可選的綁定。

let menuItem = self.menuItems[indexPath.row] 
cell.itemTitleLabel.text = menuItem.getTitle() 

錯誤消息可能會引起誤解。您正嘗試將(假定)String設置爲[MenuItem]

1

也許你想檢查MenuItem?這樣的:

if let menuItem = self.menuItems[indexPath.row] as MenuItem { 
    cell.itemTitleLabel.text = menuItem.getTitle() 
} 

你申報你的收藏與[MenuItem]類型,因此訂閱將返回非可選值,你可以刪除iflet檢查及用途:

cell.itemTitleLabel.text = self.menuItems[indexPath.row].getTitle()

+0

謝謝,我曾經這樣做過,但它不工作。在vadian實施它的方式中,它是有效的。也許Xcode的錯誤,因爲我認爲你的/我的版本和他是一樣的。無論如何非常感謝你! – Brudus

+0

@Brudus這是不一樣的,Xcode沒有錯誤。編譯器不允許可選的綁定('如果let')應用於非可選類型。 – vadian

+0

是的,我知道你的意思,但我只是補充說,如果讓因爲另一個錯誤。我認爲這是Xcode中的一個錯誤,但在重新訪問它之後,它也可能是我的另一個錯誤。 – Brudus

0

我錯過了在自定義結構中導入uikit並獲得類似錯誤。希望它能幫助有人在這裏讀書。

相關問題