2017-01-05 1 views
0

스위프트를 사용하여 요소를 숨기려고합니다. 3. 요소가 session.dataTask에 있으면 숨기지 않고 session.dataTask 외부로 이동하면 요소가 잘립니다. session.dataTask에 요소를 숨길 수 있습니까?스위프트 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 편집 된 답변을 확인하고 내 대답과 같이 주 스레드에 숨겨진 코드를 넣으십시오. –