我有以下错误:
投掷'(_)抛出函数的转换无效 - > ()” 到非投掷函数类型'(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
}
})
}
答案 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 { ...