2015-11-05 2 views
0
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 
} 

} 

Невозможно присвоить переменную значения переменной ответа внутри блока в swift. Пропал __block ключевого слова в быстройErorr в быстром коде

ошибки является:

Невозможно присвоить значение: 'ответ' является 'пусть' постоянной

+0

переименовать ответ var, теперь вы пытаетесь назначить входной параметр замыкания – user3441734

ответ

1
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 
} 

} 
0

Измените ваш response к переменному:

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

Нравится

+0

Хотя технически корректно, проблема, с которой сталкивается OP, состоит в том, что они имеют 2 переменные 'response'. Один из них был создан, а другой - в методе dataTaskWithRequest. – sbarow

Смежные вопросы