2017-01-05 6 views
0

Im пытается скрыть элемент с помощью swift 3. Элемент не скроет, если его в session.dataTask, но если я переведу его за пределы session.dataTask, элемент скрывает штраф. Можно ли скрыть элемент в session.dataTask?Swift 3 - Скрыть элементы

@IBOutlet weak var login_box: UIStackView! 



let task = session.dataTask(with: request as URLRequest) { 
      (
      data, response, error) in 

      guard let data = data, let _:URLResponse = response, error == nil else { 
       print("error") 
       return 
      } 

      //Following won't hide element 
      self.login_box.isHidden = true 
    } 

//If placed here element hides fine 
login_box.isHidden = true 

task.resume() 

ответ

2

Прежде всего, вам нужно начать URLSessionDataTask экземпляра с помощью resume и всегда выполнять UI изменения в main потоке.

let task = session.dataTask(with: request as URLRequest) { (data, response, error) in 
    guard let data = data, let _:URLResponse = response, error == nil else { 
      print("error") 
      return 
    } 

    DispatchQueue.main.async {    
      self.login_box.isHidden = true 
    } 
} 
task.resume() 

Это займет некоторое время получить ответ от сервера (зависит от скорости интернета), но если ошибка не ноль, то она не будет скрывать свою login_box, потому что это возвращение из блока.

+0

Извините, у меня было резюме, просто не поместил его в пример. – user2423476

+1

@ user2423476 Проверьте отредактированный ответ и поместите скрытый код в основной поток, как мой ответ. –

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