我想检测网络何时从以太网变为wifi(或从wifi变为以太网).我希望有一位观察员通知我这一变化.
可达性不够好 - 对于这两种情况,它总是返回ReachableViaWiFi.
PS - 之前有一些关于这个话题的问题,但是没有一个问题有好的答案,而且由于这些问题已经超过一年了,也许有人已经知道如何去做
您可以通过SystemConfiguration
模块访问系统网络首选项,这有助于您触摸当前驻留在默认位置的系统首选项存储/Library/Preferences/SystemConfiguration/preferences.plist
.
从此,您可以收到通知SCDynamicStore
通过SCDynamicStoreNotifyValue(_:_:)
或检索值SCDynamicStoreCopyValue(_:_:)
.
直接查找当前主网络服务的示例:
var store = SCDynamicStoreCreate(nil, "Example" as CFString, nil, nil) var global = SCDynamicStoreCopyValue(store, "State:/Network/Global/IPv4" as CFString)! var pref = SCPreferencesCreate(nil, "Example" as CFString, nil) var service = SCNetworkServiceCopy(pref!, global["PrimaryService"] as! CFString) var interface = SCNetworkServiceGetInterface(service!) SCNetworkInterfaceGetInterfaceType(interface!) /// Optional("IEEE80211") -> Wi-Fi
或者使用回调创建动态存储并设置通知密钥以在每次主网络服务更改通知时触发通知:
var callback: SCDynamicStoreCallBack = { (store, _, _) in /* Do anything you want */ } var store = SCDynamicStoreCreate(nil, "Example" as CFString, callback, nil) SCDynamicStoreSetNotificationKeys(store!, ["State:/Network/Global/IPv4"] as CFArray, nil)