2015-02-02 2 views
1
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) 

Мне нужно, чтобы получить состояние через запрос сети я написал выше кодNSURLSession dataTaskWithRequest время

task.resume() 

println(self.loginStatus) 

Я видел это первое Println? Println После этого изменения содержания «LoginStatus»?

+1

Я не понимаю ваш вопрос, что вы имеете в виду «Я видел его первый Println? Println После этого изменения содержания„LoginStatus“?» – LastMove

ответ

3

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 вместо того, если заявления.

Таким образом, ваш код упрощен до

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() 
+0

Потому что я приношу это сообщение alertStatus warning alertView, но ответ alertView будет очень медленным в URLSession – Saber

+2

, он должен дождаться завершения загрузки данных. как еще он может показать ответ? – rakeshbs

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