如何在swift中调用公共函数?

时间:2017-10-03 20:21:45

标签: ios swift

我正在使用检查互联网是否连接的功能。 这是代码:

 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'

所以我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

如果在类中声明了func,那么您需要该类的实例才能调用该函数。因此,您无法在没有对象的情况下致电isInternetAvailable(),例如myVC.isInternetAvailable()

在您的特定情况下,没有理由在VC中声明该函数,因为它与该ViewController无关,并且不需要来自它的任何数据(或任何特权访问)。

最简单的方法是将其设为全局函数(顶级,可能在不同的文件中)。

另一个常见的事情是将它包装在单个服务对象中(您可以查找它 - 它是UserDefaults所做的事情)