2017-06-16 41 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

相关问题