2017-06-16 99 views
1

這裏是我的代碼:錯誤:從拋型的功能轉換無效 '(_)拋出 - >()' 非拋函數型 '(DataSnapshot) - >無效'

func loadData() { 
    ref.child(currentUserID!).observe(.childAdded) { 
     (snapshot) in 
     let snapshotValue = try? snapshot.value as? [String: AnyObject] 
     if let item = try TableViewModel(id: snapshot.key, likeLabel: self.likeLabel, playLabelString: self.playLabelString, json: snapshotValue) { 
      self.items.append(item) 
     }    
     self.tableViewModel = self.items.reversed() as [TableViewModel] 
    } 
} 

我可以」噸得到我的頭圍繞以下錯誤:

Invalid conversion from throwing function of type (_) throws ->() to non-throwing function type (DataSnapshot) -> Void

以下行

ref.child(currentUserID!).observe(.childAdded) { 

請幫助。

回答

2

你的主要問題是下面的表達式:

if let item = try TableViewModel(...) { 

try命令指示你的火力地堡完成關閉可能拋出一個錯誤,而不是由你通過你的閉合到observe API預期的情況,因此,編譯錯誤你有。

好吧,那樣的話,我相信你有try?操作員的想法。如果是的話,試試這個來代替:

if let item = try? TableViewModel(...) { 

或者乾脆:

if let item = TableViewModel(...) { 

如果TableViewModel不扔在所有的任何錯誤(即它只是一個failable初始化代替)。

順便說一句,你snapshotValue變量時,也可以使用一些幫助:

let snapshotValue = snapshot.value as! [String: AnyObject] 
+0

感謝。我在'TableViewModel'上試驗了'throws'運算符,但是我將它們全部改爲'if let',而且一切看起來都很流暢。 – waseefakhtar

相關問題