dispatch_semaphore_t in swift 3
问题描述:
我在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信号灯集成?
答
您可以创建
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
}
**不要**使用信号灯对这样的异步方法调用。使用完成处理程序。 – vadian
@vadian,我想在启动画面下调用异步方法。什么是更好的方法。我怎样才能使用完成处理程序来实现它。请指导。 – pkc456