2017-01-05 58 views
0

我试图用swift隐藏一个元素3.如果元素在session.dataTask中,它不会隐藏,但如果我将它移动到session.dataTask之外,元素隐藏的很好。是否可以隐藏session.dataTask中的元素?Swift 3 - Hide Elements

@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

所有你需要使用resume开始URLSessionDataTask实例,并始终main线程中执行UI变化的第一个。

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检查编辑的答案,并将隐藏的代码放在主线程中,就像我的答案一样。 –