gpt4 book ai didi

swift - 从类型 '(_) throws -> ()' 的抛出函数到非抛出函数类型 '(DataSnapshot) -> Void' 的转换无效

转载 作者:行者123 更新时间:2023-11-30 12:24:20 25 4
gpt4 key购买 nike

我有以下错误:

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

最佳答案

您在完成 block 中抛出错误。这是不可能的,并且会导致错误。

闭包的返回值与封闭函数的返回值无关 - 严格来说,抛出不是返回值,但也会受到影响。

为了能够从闭包中返回某些内容,您必须实现一个完成 block 而不是抛出

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

并使用它

completion(value.isEmpty ? UserError.Empty : nil)
<小时/>

旁注:您使用了太多问号和感叹号。例如,使用可选绑定(bind)来解包可选值(并使用 Swift 原生集合类型)

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

关于swift - 从类型 '(_) throws -> ()' 的抛出函数到非抛出函数类型 '(DataSnapshot) -> Void' 的转换无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44380855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com