[英]unexpected non void return value in void function
我一直在寻找堆栈溢出的问题,试图找出解决此错误的方法:
void函数中意外的non void返回值
我在函数中返回一个Bool
值。
我似乎无法从这条路中摸索出来。 我确定它与异步有关,但是我对这些类型的函数不是很熟悉。
class CheckReachability {
class func setupReachability (hostName:String?, useClosures: Bool) -> Bool{
var reachability : Reachability!
var connected = false
let reachability2 = hostName == nil ? Reachability() : Reachability(hostname: hostName!)
reachability = reachability2
try! reachability?.startNotifier()
if useClosures {
reachability2?.whenReachable = { reachability in
DispatchQueue.main.async {
connected = true
print("Reachable....")
}
}
reachability2?.whenUnreachable = { reachability in
DispatchQueue.main.async {
connected = false
print("Not Connected....")
}
}
} else {
NotificationCenter.default.addObserver(self, selector: Selector(("reachabilityChanged:")), name: ReachabilityChangedNotification, object: reachability2)
}
return connected
}
}
从另一台vc上的viewdidload调用此命令没有足够的时间来获得真实的结果
let connected = CheckReachability.setupReachability(hostName: nil, useClosures: true)
if connected {
您的问题令人困惑,因为您发布的代码没有您描述的错误。 但是,您试图创建一个从异步函数返回结果的函数。 异步不是这样工作的。
异步函数开始在后台执行任务,该任务在返回之前就不会完成。
您需要调整自己的想法。 无需尝试从函数中返回结果,而是需要编写函数以采用完成处理程序。 然后,您可以在长时间运行的任务完成后(即在函数返回之后)调用完成处理程序。
@bubuxu为您提供了代码,显示了如我所述如何修改功能。
如果要编写一个检查类来侦听可到达性,请将其定义为单例,然后将completeBlock传递给它,如下所示:
class CheckReachability {
static let shared = CheckReachability()
var reachability: Reachability?
func setupReachability(hostName:String?, completeBlock: ((Bool) -> Void)? = nil) {
reachability = hostName == nil ? Reachability() : Reachability(hostname: hostName!)
try? reachability?.startNotifier()
if let block = completeBlock {
reachability?.whenReachable = { reachability in
DispatchQueue.main.async {
print("Reachable....")
block(true)
}
}
reachability?.whenUnreachable = { reachability in
DispatchQueue.main.async {
print("Not Connected....")
block(false)
}
}
} else {
// If we don't use block, there is no point to observe it.
NotificationCenter.default.addObserver(self, selector: #selector(reachabilityChanged(_:)), name: .ReachabilityChangedNotification, object: nil)
}
}
deinit {
NotificationCenter.default.removeObserver(self)
}
@objc func reachabilityChanged(_ notification: Notification) {
// ?? what should we do here?
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.