我正在使用 Reachability.h 库检查我的swift应用程序中的网络状态。
我在“案例”行中遇到了这个问题:
找不到接受提供的'〜='的重载 参数
我该如何解决?
func checkNetworkStatus(){
var reachability = Reachability()
var internetReachable = Reachability(hostName: "www.google.es")
var status: NetworkStatus = internetReachable.currentReachabilityStatus()
switch(status){
case NotReachable:
println("No connection")
case ReachableViaWiFi:
println("wifi")
case ReachableViaWWAN:
println("Wwan")
}
}
解决
我已经解决了:
status.value
返回一个整数:
答案 0 :(得分:3)
最简单的解决方案是使用以下内容替换NetworkStatus
声明:
typedef NS_ENUM(NSInteger, NetworkStatus) {
NotReachable = 0,
ReachableViaWiFi,
ReachableViaWWAN
};
Apple使用NS_ENUM
和NS_OPTION
宏将枚举转换为Swift。但是,未使用此宏声明枚举,并且无法将其直接转换为Swift。
另一种解决方案是添加(NetworkStatus
的模式匹配)
func ~=(a: NetworkStatus, b : NetworkStatus) -> Bool {
return (a.value == b.value)
}
但请注意,default:
中也需要switch
分支。
答案 1 :(得分:0)
试试这个
import Foundation
import SystemConfiguration
public class ConectionReachability
{
class func isConnectedToNetwork() -> Bool
{
var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
zeroAddress.sin_family = sa_family_t(AF_INET)
let defaultRouteReachability = withUnsafePointer(&zeroAddress)
{
SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0)).takeRetainedValue()
}
var flags: SCNetworkReachabilityFlags = 0
if SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) == 0
{
return false
}
let isReachable = (flags & UInt32(kSCNetworkFlagsReachable)) != 0
let needsConnection = (flags & UInt32(kSCNetworkFlagsConnectionRequired)) != 0
return (isReachable && !needsConnection) ? true : false
}
}