使用OS X中的Swift显示所有可用的WIFI连接 [英] Display all available WIFI connections with Swift in OS X

查看:308
本文介绍了使用OS X中的Swift显示所有可用的WIFI连接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试显示所有可用的WIFI连接.它不起作用.这是我的代码:

I'm trying to display all available WIFI connections. It doesn't work. Here is my code:

import Foundation
import CoreWLAN

var cwInterface = CWInterface()

do {
    let routers = try cwInterface.scanForNetworksWithSSID(nil)
    print(routers)
} catch let error as NSError {
    print("Error: \(error.localizedDescription)")
}

我没有任何结果.我在做什么错了?

I don't get any result. What I'm doing wrong?

推荐答案

如果使用接口名称(例如"en1")初始化CWInterface,则该方法有效.

It works if you initialize CWInterface with an interface name, like "en1".

但是最好不要使用经过编码的名称,因此我们还将使用CWWiFiClient.sharedWiFiClient().interface(),它会返回默认的WIFI接口.

But it's better to not use harcoded names, so we'll also use CWWiFiClient.sharedWiFiClient().interface() which returns the default WIFI interface.

用于管理所有这些的类的示例:

Example of a class to manage all this:

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

结果包含所有扫描的网络:

Results contains all the scanned networks:

[<CWNetwork: 0x608000001bd0> [ssid=SomeNetworkName, bssid=xxxx, security=WPA Enterprise, rssi=xx, channel=<CWChannel: 0x600000004fb0> [channelNumber=11(2GHz), channelWidth={20MHz}], ibss=0], etc]

这篇关于使用OS X中的Swift显示所有可用的WIFI连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆