【发布时间】:2016-08-13 18:55:12
【问题描述】:
我尝试创建将 Internet 状态返回为 Bool 的函数:
func isConnectedToNetwork()->Bool{
var InternetStatus = Bool()
RealReachability.sharedInstance().reachabilityWithBlock { (status:ReachabilityStatus) in
switch status {
case .RealStatusNotReachable:
InternetStatus = false
default:
InternetStatus = true
}
}
return InternetStatus
}
但是我有一个问题,RealReachability.sharedInstance().reachabilityWithBlock {} 在后台线程中工作,并且函数在后台线程完成之前返回。
函数返回前如何等待后台线程结果?
【问题讨论】:
-
你不能。这一定是最常被问到的 iOS 问题。提问前请在 Stack Overflow 上搜索。搜索异步。例如,请参阅我的答案:stackoverflow.com/a/24520296/341994
-
我投票结束这个问题,因为它已经在 Stack Overflow 上被多次询问和回答。
-
马特,你错了!我可以使用信号量来做到这一点!请不要投票结束这个问题。
-
是的,你可以。但你不应该。所以不要。不。听听您被告知的内容(我、vadian 以及 Stack Overflow 上有关此主题的所有答案)。在访问网络时,信号量会阻塞主线程,不管它需要多长时间。这将挂起您的应用程序界面,甚至可能导致 WatchDog 进程当场杀死您的应用程序。即使挂断时间很短,它仍然是错误的。
标签: swift function reachability background-thread