I have the following closure within a struct thats causing some confusion.
var response: (result: Result<UserInfo>) -> Void
struct RegisterRequest: Requestable 
{
    let userInfo : [String:AnyObject]
    var response: (result: Result<UserInfo>) -> Void
}
Now when I try to implement it, I have the following:
let register = RegisterRequest(userInfo: userInfo, response: { (result) in
})
If closure syntax is
{ (params) -> returnType in 
   statements
}
Why is swift auto correcting my implementation to (result) in instead of (Void) in
The block variable response is expected to take a single parameter whose type is Result, not Void or (). Thus, Xcode automatically fills in with an argument named result representing a Result object. Since return type is Void, anything after -> can simply be omitted.
More explicitly, it would be written as:
..., response: { (result: Result<UserInfo>) -> Void in
})
For the sake of simplicity, it is converted to:
..., response: { (result) in
})
Parenthesis around arguments can also be omitted:
..., response: { result in
})
or better with trailing closure syntax:
RegisterRequest(userInfo: userInfo) { result in
  ...
}
If you don't want the block taking any parameter, you can define type of that as one of the below:
var response: (Void) -> Void
var response: () -> Void
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With