它适用于初始化接口名称的CWInterface,如“en1”。
但是最好不要使用harcoded名称,所以我们还会使用CWWiFiClient.sharedWiFiClient().interface()
,它会返回默认的WIFI接口。一类
实例来管理这一切:
class Discovery {
var currentInterface: CWInterface
var interfacesNames: [String] = []
var networks: Set<CWNetwork> = []
// Failable init using default interface
init?() {
if let defaultInterface = CWWiFiClient.sharedWiFiClient().interface(),
name = defaultInterface.interfaceName {
self.currentInterface = defaultInterface
self.interfacesNames.append(name)
self.findNetworks()
} else {
return nil
}
}
// Init with the literal interface name, like "en1"
init(interfaceWithName name: String) {
self.currentInterface = CWInterface(interfaceName: name)
self.interfacesNames.append(name)
self.findNetworks()
}
// Fetch detectable WIFI networks
func findNetworks() {
do {
self.networks = try currentInterface.scanForNetworksWithSSID(nil)
} catch let error as NSError {
print("Error: \(error.localizedDescription)")
}
}
}
用默认接口调用它:
if let discovery = Discovery() {
print(discovery.networks)
for network in discovery.networks {
print(network.ssid!)
}
}
或与接口名称:
let discovery = Discovery(interfaceWithName: "en1")
let results = discovery.networks
结果包含了所有扫描的网络:
[<CWNetwork: 0x608000001bd0> [ssid=SomeNetworkName, bssid=xxxx, security=WPA Enterprise, rssi=xx, channel=<CWChannel: 0x600000004fb0> [channelNumber=11(2GHz), channelWidth={20MHz}], ibss=0], etc]
使用让名= CWWiFiClient.interfaceNames()或(不建议使用,现在让names_old = CWInterface.interfaceNames()),它给你设定可用的接口名称(我同意, “EN1” 将最有可能是该集合中的唯一值,但我尽量避免使用“有线”名称) – user3441734
我使用let interface = CWWiFiClient.sharedWiFiClient()。interface()这给了我'默认'有界面(是的,通常是相同的作为CWInterface(名称:“en1”))。 – user3441734
@ user3441734再次,一个非常有用的评论。我已经将这添加到我的默认初始化程序的答案中。谢谢你的提示。 – Moritz