【问题标题】:Erorr in the swift codeswift代码中的错误
【发布时间】:2015-11-05 11:06:37
【问题描述】:
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 中为块内的响应变量赋值。 swift中缺少关键字__block

错误是:

无法赋值:'response' 是 'let' 常量

【问题讨论】:

  • rename var response,现在你正在尝试分配闭包的输入参数

标签: swift


【解决方案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
 }

}

【讨论】:

    【解决方案2】:

    将您的 response 更改为变量:

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

    这样

    【讨论】:

    • 虽然技术上正确,但 OP 的问题是它们有 2 个 response 变量。他们创建的一个,一个他们在dataTaskWithRequest 方法中收到的返回。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 2016-02-26
    • 2015-06-25
    相关资源
    最近更新 更多