void函数Swift3中意外的非无效返回值 [英] Unexpected non-void return value in void function Swift3
问题描述
我有一个返回类对象或nil的函数.该功能的目的是检查Chat
是否存在.聊天ID存储在MySQL中.如果ID存在,则执行Firebase引用以获取快照,然后获取对象.如果该ID不存在,则返回nil:
I have a function that returns either a class object or nil. The function's purpose is to check if a Chat
exists. The chat ID's are stored in MySQL. If the ID exists, I perform a Firebase reference to get a snapshot and then get the object. If the ID does not exist, I return nil:
func findChat(string: String) -> Chat? {
var returnValue: (Chat?)
let url = getChatsURL
let Parameters = [ "title" : string ]
Alamofire.request("\(url)", method: .post, parameters: Parameters).validate().responseString { response in
if let anyResponse = response.result.value {
self.responseFromServer = anyResponse
}
if self.responseFromServer == "" {
returnValue = nil
} else {
let ref = DatabaseReference.chats.reference()
let query = ref.queryOrdered(byChild: "uid").queryEqual(toValue: (self.responseFromServer))
query.observe(.childAdded, with: { snapshot in
returnValue = Chat(dictionary: snapshot.value as! [String : Any])
})
}
return returnValue
}
}
但是,在return returnValue
我正在
void函数中意外的非void返回值.
Unexpected non-void return value in void function.
有什么想念我的东西吗?
Any thoughts of what I could be missing?
推荐答案
问题是,您试图从闭包内部返回非空值,该值仅从闭包中返回,但由于该闭包预期为空返回值,您会收到错误消息.
The problem is that you are trying to return a non-void value from inside a closure, which only returns from the closure, but since that closure expects a void return value, you receive the error.
您不能使用标准的return ...
语法从异步函数返回,必须声明函数以接受完成处理程序,并从完成处理程序内部的异步网络调用返回值.
You cannot return from an asynchronous function using the standard return ...
syntax, you have to declare your function to accept a completion handler and return the value from the async network call inside the completion handler.
func findChat(string: String, completion: @escaping (Chat?)->()) {
var returnValue: (Chat?)
let url = getChatsURL
let Parameters = [ "title" : string ]
Alamofire.request("\(url)", method: .post, parameters: Parameters).validate().responseString { response in
if let anyResponse = response.result.value {
self.responseFromServer = anyResponse
}
if self.responseFromServer == "" {
completion(nil)
} else {
let ref = DatabaseReference.chats.reference()
let query = ref.queryOrdered(byChild: "uid").queryEqual(toValue: (self.responseFromServer))
query.observe(.childAdded, with: { snapshot in
completion(Chat(dictionary: snapshot.value as! [String : Any]))
})
}
}
}
然后您可以调用此函数并使用返回值,如下所示:
Then you can call this function and use the return value like this:
findChat(string: "inputString", completion: { chat in
if let chat = chat {
//use the return value
} else {
//handle nil response
}
})
这篇关于void函数Swift3中意外的非无效返回值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!