我在Objective C中有一个很好的工作方法来检查与IP地址的网络连接是否可用。转换为Swift有一个问题。
错误是: 非托管' SCNetworkReachability'与SCNetworkReachability'
不同编译器在代码行停止:
让成功= SCNetworkReachabilityGetFlags(可达性和标志)
我想我忽略了一些重要的事情!
这种方法是检查连接是否存活以及主机是否可用的正确方法吗?
func hostReachable(ipadres:String) -> Bool {
let host_name = ipadres.cStringUsingEncoding(NSASCIIStringEncoding)
let reachability = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, host_name!)
var flags:SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(kSCNetworkReachabilityFlagsReachable)
let success = SCNetworkReachabilityGetFlags(reachability, &flags)
let isAvailable = success && (flags | kSCNetworkFlagsReachable) && !(flags | kSCNetworkFlagsConnectionRequired)
println("Reachability results---> \(success) \(host_name)', flags: \(flags)")
if (isAvailable) {
return true
} else {
println("'hostReachable:--> \(host_name) is not reachable")
return false
}
return false
}
添加更正后,完整的工作版本就在这里。
func hostReachable(ipadres:String) -> Bool {
if let host_name = ipadres.cStringUsingEncoding(NSASCIIStringEncoding) {
let reachability = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, host_name).takeRetainedValue()
var flags : SCNetworkReachabilityFlags = 0
if SCNetworkReachabilityGetFlags(reachability, &flags) == 0 {
return false
}
let isReachable = (flags & UInt32(kSCNetworkFlagsReachable)) != 0
let needsConnection = (flags & UInt32(kSCNetworkFlagsConnectionRequired)) != 0
return (isReachable && !needsConnection)
}else{
return false
}
}
此方法将检查网络更正是上升还是下降,但遗憾的是它不会检查主机或IP是否真的可以访问。怎么可能这样呢? (目前我正在使用带有NSTask的Ping命令)。