Praveen Castelino
Praveen Castelino

Reputation: 69

Erorr in the swift code

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

Answers (2)

user3441734
user3441734

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

katleta3000
katleta3000

Reputation: 2494

Change your response to variable:

let task = dataTaskWithRequest(request) { (data :NSData?, var response: NSURLResponse?, error: NSError?) -> Void in

Like this

Upvotes: 0

Related Questions