【问题标题】:NSURLSession dataTaskWithRequest timeNSURLSession dataTaskWithRequest 时间
【发布时间】:2015-02-02 07:58:34
【问题描述】:
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
                data, response, error in
                var taskString = NSString(data: data, encoding: NSUTF8StringEncoding)
                println(taskString)
                if taskString == "10004" {

                    self.loginStatus=10004
                }else if taskString == "10005" {

                    self.loginStatus=10005
                }else if taskString == "10002" {

                    self.loginStatus=10002
                }else if taskString == "10003" {

                    self.loginStatus=10003
                }else if taskString == "10001" {

                    self.loginStatus=10001
                }else{

                    self.loginStatus=10000
                }
            }
            task.resume()

            println(self.loginStatus)

我需要通过网络请求获取状态 上面的代码是我写的

task.resume()

println(self.loginStatus)

我第一次看到println? println 之后改变'loginStatus'的内容?

【问题讨论】:

  • 我不明白你的问题,你说的“我第一次看到println?println之后改变'loginStatus'的内容?”是什么意思?

标签: swift nsurlsession


【解决方案1】:

NSURLSession.sharedSession().dataTaskWithRequest 是一个在后台线程中运行的异步进程。异步过程完成数据下载后调用函数内部的块。

task.resume() 语句到println 之后继续执行,而dataTaskWithRequest 在后台执行。这就是为什么首先执行您的 println 语句的原因。要在任务执行后打印值,请将其放在块内。

let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
    data, response, error in
    var taskString = NSString(data: data, encoding: NSUTF8StringEncoding)
    println(taskString)
    if taskString == "10004" {
        self.loginStatus=10004
    } else if taskString == "10005" {
        self.loginStatus=10005
    } else if taskString == "10002" {
        self.loginStatus=10002
    } else if taskString == "10003" {
        self.loginStatus=10003
    } else if taskString == "10001" {
        self.loginStatus=10001
    } else {
        self.loginStatus=10000
    }

    println(self.loginStatus) // print it here
}
task.resume()

如果loginStatus 始终是整数,您可以使用toInt 函数代替if 语句。

因此您的代码被简化为

let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
    data, response, error in
    var taskString = NSString(data: data, encoding: NSUTF8StringEncoding)
    println(taskString)

    if let status = taskString.toInt() {
       self.loginStatus = status
    }
    else {
        self.loginStatus = 10000
    }

    println(self.loginStatus) // print it here
}
task.resume()

【讨论】:

  • 因为我确实带上了loginStatus判断alertView消息,但是在URLSession中alertView响应会很慢
  • 它必须等到数据下载完成。它还能如何显示响应?
猜你喜欢
  • 1970-01-01
  • 2016-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多