Unexpected non-void return value in void function Swift3
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.
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
}
})
Why i am getting Unexpected non-void return value in void function error while returning value in swift?
I think AuthManager.shared.saveAddressAsWorkHome(params) { (response) in
this is asynchronous
closure and you are try to return a value in it so you getting this error.
You can not return from asynchronous function directly. You have to add a completion handler on your method and return the value from async in completion handler
So you have to change your function
func getLatDestination(completion : @escaping (Double) -> ()){
var params = [String: Any]()
params[ParametersKeys.access_token] = KeyChain.getAccessToken()!
params[ParametersKeys.address] = googlePlaceObject?.results.first?.formattedAddress
params[ParametersKeys.latitude] = googlePlaceObject?.results.first?.geometry.location.lat
params[ParametersKeys.longitude] = googlePlaceObject?.results.first?.geometry.location.lng
params[ParametersKeys.googlePlaceId] = googlePlaceObject?.results.last?.placeId
params[ParametersKeys.login_type] = 1
AuthManager.shared.saveAddressAsWorkHome(params) { (response) in
if response.flag == RESPONSE_FLAGS.flag_143 {
if let addressData = response.response["addresses"] as? [[String: Any]] {
completion(addressData[0]["lat"])
}
}
}
And when you call your function
getLatDestination(completion: {ret in
print(ret)
})
Swift - unexpected non-void return value in void function
You are missing return type in your method header.
func calculateDistance(location: CLLocation) -> CLLocationDistance {
Seemingly my answer looks as an inferior duplicate, so some addition.
Functions (including methods, in this case) declared without return types are called as void function, because:
func f() {
//...
}
is equivalent to:
func f() -> Void {
//...
}
Usually, you cannot return any value from such void functions.
But, in Swift, you can return only one value (I'm not sure it can be called as "value"), "void value" represented by ()
.
func f() {
//...
return () //<- No error here.
}
Now, you can understand the meaning of the error message:
unexpected non-void return value in void function
You need to change the return value or else change the return type Void
to some other type.
Related Topics
How to Update the Constant Height Constraint of a Uiview Programmatically
Structure VS Class in Swift Language
Sending Json Array Via Alamofire
Load a Uiview from Nib in Swift
Opt Out of Uiscenedelegate/Swiftui on Ios
How to Compare Two Dictionaries in Swift
Swift - Iboutletcollection Equivalent
Class Conforming to Protocol as Function Parameter in Swift
Why Is an Observedobject Array Not Updated in My Swiftui Application
How to Pop to the Root View Using Swiftui
How to Create Instances of Managed Object Subclasses in a Nsmanagedobject Swift Extension
Photopicker Discovery Error: Error Domain=Pluginkit Code=13
When Are Argument Labels Required in Swift
Swift 3 For Loop With Increment
How to Set Cell Spacing and Uicollectionview - Uicollectionviewflowlayout Size Ratio