Reputation: 69
typealias NetworkResponse = (data: NSData?, response: NSURLResponse?, error: NSError?)
extension NSURLSession {
func sendSynchronousDataTaskWithRequest(request: NSURLRequest) -> NetworkResponse? {
let semaphore = dispatch_semaphore_create(0)
var response: NetworkResponse? = nil
let task = dataTaskWithRequest(request) { (data :NSData?, response: NSURLResponse?, error: NSError?) -> Void in
response = NetworkResponse(data: data, response: response, error: error)
dispatch_semaphore_signal(semaphore)
}
task.resume()
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)
return response
}
}
Unable to assign value to response variable inside block in swift. Missing the keyword __block in swift
the error is:
Cannot assign to value: 'response' is a 'let' constant
Upvotes: 0
Views: 97
Reputation: 17544
typealias NetworkResponse = (data: NSData?, response: NSURLResponse?, error: NSError?)
extension NSURLSession {
func sendSynchronousDataTaskWithRequest(request: NSURLRequest) -> NetworkResponse? {
let semaphore = dispatch_semaphore_create(0)
var res: NetworkResponse? = nil
let task = dataTaskWithRequest(request) { (data :NSData?, response: NSURLResponse?, error: NSError?) -> Void in
res = NetworkResponse(data: data, response: response, error: error)
dispatch_semaphore_signal(semaphore)
}
task.resume()
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)
return res
}
}
Upvotes: 1
Reputation: 2494
Change your response
to variable:
let task = dataTaskWithRequest(request) { (data :NSData?, var response: NSURLResponse?, error: NSError?) -> Void in
Like this
Upvotes: 0