2017-01-05 4 views
0

swiftを使用して要素を隠そうとしています。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

あなたが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() 

それは(あなたのインターネットの速度に依存)サーバーからの応答を取得するいくつかの時間がかかりますが、エラーがnilでない場合、それはブロックからのリターンですので、それはあなたのlogin_boxを隠しません。

+0

申し訳ありませんが再開しましたが、例には載せませんでした。 – user2423476

+1

@ user2423476編集した答えをチェックし、私の答えのようにメインスレッドに隠しコードを入れてください。 –