2017-09-06 146 views
0

我在objective C中使用下面的代码来处理信号量。dispatch_semaphore_t in swift 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