投掷'(_)抛出函数的转换无效 - > ()'到非投掷函数类型'(DataSnapshot) - >虚空”

时间:2017-06-06 03:17:05

标签: swift

我有以下错误:

  

投掷'(_)抛出函数的转换无效 - > ()”   到非投掷函数类型'(DataSnapshot) - >无效“

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

1 个答案:

答案 0 :(得分: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 { ...
相关问题