swift 3 中的 dispatch_semaphore_t

pkc*_*456 1 semaphore dispatch ios swift3

我正在使用以下代码objective C来处理信号量。

-(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]];
    }

}
Run Code Online (Sandbox Code Playgroud)

'dispatch_semaphore_t' 在 Swift 中不可用

如何在swift 3中集成信号量?

Gov*_*iyo 7

你可以通过创建

let semaphore = DispatchSemaphore(value: 0)
Run Code Online (Sandbox Code Playgroud)

学习苹果官方文档

或从其他代码

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
        }
Run Code Online (Sandbox Code Playgroud)