2017-09-06 6 views
0

objective Cで以下のコードを使用してセマフォを処理しています。swatchでdispatch_semaphore_t 3

-(void)doSome{ 
    semaphore = dispatch_semaphore_create(0); 

    BaseViewController *baseVC = [[BaseViewController alloc]init]; 
    if(baseVC.isUserObjectExist){ 
     [self callLoginWebService:baseVC.userObject.username passwordString:baseVC.userObject.password]; 
    }else{ 
     dispatch_semaphore_signal(semaphore); 
    } 

    while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW)) { //2 
     [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:100]]; 
    } 

} 

しかし

'dispatch_semaphore_tは' 迅速3でセマフォを統合する方法

スウィフト

で利用できないのですか?

+0

により作成することができます。完了ハンドラを使用します。 – vadian

+0

@vadian、私はスプラッシュ画面の下で非同期メソッドを呼び出したいと思います。何が良い方法です。どのように私は完了ハンドラを使用して達成することができます。ご案内ください。 – pkc456

答えて

2

あなたは**、非同期メソッド呼び出しのためのセマフォを使用しないでください**

let semaphore = DispatchSemaphore(value: 0) 

Learn official document of Apple

またはその他のコードから

let url = URL(string: "") 
     let semaphore = DispatchSemaphore(value: 0) // 1 
     let _ = DownloadPhoto(url: url!) { 
      _, error in 
      if let error = error { 
      } 
      semaphore.signal() // 2 
     } 
     let timeout = DispatchTime.now() + .seconds(5) 
     if semaphore.wait(timeout: timeout) == .timedOut { // 3 
     } 
+0

'value'を0として渡しました。その意義は何ですか? – pkc456

+0

2.私の場合、 'DownloadPhoto'からのコールバックはメインキューにあります。したがって、セマフォーは決して通知されません。メインキューを使用してセマフォを操作する方法。 – pkc456