2015-11-05 70 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中的塊內部的響應變量賦值。缺少迅速快速代碼中的Erorr

出錯的關鍵字__block是:

無法指定值: '響應' 是一個 '讓' 常量

+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個「響應」變量。一個是他們創建的,一個是他們收到的'dataTaskWithRequest'方法。 – sbarow