我需要一些帮助来理解为什么我会看到以下内容。
AFNetworking 3.0.4
在 iOS9.x 上
如果我抓住可达性管理器
AFNetworkReachabilityManager.sharedManager()
然后添加一个 setReachabilityStatusChangeBlock 然后我得到我所期望的。
- 飞行模式:
NotReachable
- WiFi 关闭:
ReachableViaWWAN
- WiFi 开启:
ReachableViaWiFi
所以 - 一般情况下都按预期工作。
但我想更准确一点——我们知道我们正在与之交谈的 IP 地址,所以我想managerForAddress
改用它。这是我从网上收集到的代码(大多数示例都是针对 obj-c 而不是 swift) - 在下面 - ip 是地址的字符串(点四边形形式):
let isLittleEndian = Int(OSHostByteOrder()) == OSLittleEndian
let htons = isLittleEndian ? _OSSwapInt16 : { $0 }
var address = sockaddr_in()
address.sin_len = UInt8(sizeofValue(address))
address.sin_family = sa_family_t(AF_INET)
address.sin_port = htons(443);
address.sin_addr.s_addr = inet_addr(ip);
addressReachability = withUnsafePointer(&address) {
AFNetworkReachabilityManager(forAddress: UnsafePointer($0))
}
然后我可以向这个管理器添加一个 setReachabilityStatusChangeBlock 并开始监控。
现在 - 我作为 IP 发送的内容无关紧要 - 一个空字符串,一个 443 正在侦听的有效 IP 地址,一个 443 未侦听的有效 IP 地址,一个无效的 IP 地址 - 结果与 sharedManager 的结果完全匹配- 如果我使用 wifi - 那么它是ReachableViaWiFi
,如果我只使用 4G,那么它是ReachableViaWWAN
,如果我处于飞行模式它是NotReachable
。
所以 - 要么我完全误解了如何managerForAddress
使用,要么我有一个代码错误:) 在任何一种情况下,我都很想听听我误解/错了什么。