我试图告诉用户通过标签检查连接是否存在问题,并且如果连接再次起作用,标签将消失。我的代码工作正常,但是当我手动关闭wifi时,除非我关闭并再次打开该应用,否则标签不会显示!我很困惑每次在不关闭和打开应用程序的情况下都要在代码上添加什么以进行检查?
func InternetCheck () -> Bool {
var zeroAddress = sockaddr_in()
zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
zeroAddress.sin_family = sa_family_t(AF_INET)
let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in
SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress)
}
}
var flags = SCNetworkReachabilityFlags()
if !SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) {
return false
}
let isReachable = flags.contains(.reachable)
let needsConnection = flags.contains(.connectionRequired)
return (isReachable && !needsConnection)
}
override func viewDidLoad() {
super.viewDidLoad()
if InternetCheck() == false {
stsLabel.text = "Check your Internet Connection"
} else {
stsLabel.isHidden = true
}
}
答案 0 :(得分:0)
您在viewDidLoad()中调用InternetCheck(),但没有侦听器,它将调用一次。尝试这样的事情:
let reachabilityManager = Alamofire.NetworkReachabilityManager(host: "www.apple.com")
override func viewDidLoad() {
listenForReachability()
}
func listenForReachability() {
self.reachabilityManager?.listener = { [weak self]status in
switch status {
case .notReachable:
self?.showNoInternetConnectionAlert()
case .unknown :
print("It is unknown whether the network is reachable")
case .reachable(.ethernetOrWiFi):
//do sth
case .reachable(.wwan):
// do sth
}
}
self.reachabilityManager?.startListening()
}