我正在使用检查互联网是否连接的功能。 这是代码:
public func isInternetAvailable() -> 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
}
isReachable = flags.contains(.reachable)
let needsConnection = flags.contains(.connectionRequired)
return (isReachable && !needsConnection)
}
我也想检查另一个View Controller中的互联网连接。 这是我的尝试:
let internetConnectivity = isInternetAvailable()
if internetConnectivity == true {
//do Stuff
}
但是我收到以下错误:
使用未解析的标识符' isInternetAvailable'
所以我该如何解决这个问题?
答案 0 :(得分:3)
如果在类中声明了func
,那么您需要该类的实例才能调用该函数。因此,您无法在没有对象的情况下致电isInternetAvailable()
,例如myVC.isInternetAvailable()
在您的特定情况下,没有理由在VC中声明该函数,因为它与该ViewController无关,并且不需要来自它的任何数据(或任何特权访问)。
最简单的方法是将其设为全局函数(顶级,可能在不同的文件中)。
另一个常见的事情是将它包装在单个服务对象中(您可以查找它 - 它是UserDefaults
所做的事情)