我正在开发一个用Swift编写的iOS应用程序,该应用程序可以在本地网络上与HTTP服务器通信,我正在使用苹果的Reachability类来确定运行HTTP服务器的远程机器是否联机。下面是代码:
...
let RemoteHost: String = "192.168.178.130"
var RemoteReachability: Reachability! = nil
var RemoteIsReachable: Bool = false
init() {
super.init()
self.RemoteReachability = Reachability(hostName: self.RemoteHost)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "reachabilityChanged:", name: kReachabilityChangedNotification, object: self.RemoteReachability)
self.RemoteReachability.startNotifier()
self.RemoteIsReachable = (self.RemoteReachability.currentReachabilityStatus().value == ReachableViaWiFi.value)
}
func reachabilityChanged(notification: NSNotification) {
let ReachabilityInst: Reachability = notification.object as Reachability
self.RemoteIsReachable = (ReachabilityInst.currentReachabilityStatus().value == ReachableViaWiFi.value)
}
问题是,不管远程计算机是在线的还是离线的,
(ReachabilityInst.currentReachabilityStatus().value == ReachableViaWiFi.value)
总是正确的,只要我连接到Wifi网络。然而,当我关掉Wifi时,结果是假的,而不是真。我是不是做错了什么,还是Reachability类与Swift/xCode 6 Beta不兼容?我也试过这样做:
(ReachabilityInst.currentReachabilityStatus() == ReachableViaWiFi)
但这导致xCode告诉我“无法找到接受所提供参数的'==‘的过载”,尽管两者似乎都是'NetworkStatus’类型。
提前谢谢。
发布于 2019-11-19 11:39:24
使用组合和可实现性:
import Combine
import Reachability
import os
class ReachabilityStore: ObservableObject {
private var reachability: Reachability
@Published var reachable: Bool = false
@Published var reachableViaWifi: Bool = false
@Published var reachableViaCellular: Bool = false
init() {
reachability = try! Reachability()
reachability.whenReachable = { [weak self] reachability in
guard let self = self else { return }
self.reachable = true
self.reachableViaWifi = reachability.connection == .wifi
self.reachableViaCellular = !self.reachableViaWifi
os_log(
"Reachable via %{public}s",
self.reachableViaWifi ? "WiFi" : "Cellular"
)
}
reachability.whenUnreachable = { [weak self] _ in
guard let self = self else { return }
os_log("Unreachable")
self.reachable = false
self.reachableViaWifi = false
self.reachableViaCellular = false
}
do {
try reachability.startNotifier()
} catch {
os_log("Unable to start reachability notifier.")
}
}
}
https://stackoverflow.com/questions/24713449
复制相似问题