2017-06-06 38 views
0

我有以下錯誤:從拋型的功能轉換無效 '(_)拋出 - >()' 非拋函數型 '(DataSnapshot) - >虛空'

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

func getUserList() throws { 
    var ref: DatabaseReference! 
    ref = Database.database().reference() 
    ref.child("User").observeSingleEvent(of: .value, with: { (snapshot) in 

    let value = snapshot.value as? NSDictionary 
     let keys = value?.allKeys 

     for key in keys! { 
     let dict = value?[key] as? NSDictionary 
     let user = User.init(name: dict?["Name"] as? String ?? "", selected: dict?["Selected"] as? String ?? "") 
     let viewUser = ViewUser.init(user: user) 
      self.data.append(viewUser) 

      debugPrint(user ?? "") 
     } 
     self.tableView.reloadData() 

     if value?.count == 0 { 
      throw UserError.Empty 
     } 
    }) 
} 

回答

0

你在完成塊中拋出一個錯誤。這是不可能的,並導致錯誤。

封閉的返回值與封閉函數的返回值無關 - 嚴格地講,throws不是返回值,但也會受到影響。

爲了能夠從封閉返回的東西,你必須執行一項完成塊,而不是throws

func getUserList(completion : (Error?) ->()) 

,並用它

completion(value.isEmpty ? UserError.Empty : nil) 

側面說明:您正在使用太多的問題和感嘆號。例如使用可選綁定來解開可選項(並使用Swift本機收集類型)

if let value = snapshot.value as? [String:Any] { 
    for key in value.keys { ... 
相關問題