Отображение SSID в приложении iOS с помощью Swift

В настоящее время я пытаюсь отобразить SSID подключенного пользователя Wi-Fi и сравнить его с конкретным SSID, например, установленным SSID является WirelessHotspot.

Когда подключенный Wi-Fi пользователя - «WirelessHotspot», приложение покажет, что оно подключено к правильному Wi-Fi, а также отобразит имя Wi-Fi.

В настоящее время я пробовал этот код, на который есть ссылка в Получить SSID в Swift 2:

import UIKit

import Foundation
import SystemConfiguration.CaptiveNetwork

public class SSID {
    class func fetchSSIDInfo() ->  String {
        var currentSSID = ""
        if let interfaces:CFArray! = CNCopySupportedInterfaces() {
            for i in 0..<CFArrayGetCount(interfaces){
                let interfaceName: UnsafePointer<Void> = CFArrayGetValueAtIndex(interfaces, i)
                let rec = unsafeBitCast(interfaceName, AnyObject.self)
                let unsafeInterfaceData = CNCopyCurrentNetworkInfo("\(rec)")
                if unsafeInterfaceData != nil {
                    let interfaceData = unsafeInterfaceData! as Dictionary!
                    currentSSID = interfaceData["SSID"] as! String

                }
            }
            self.networkname.text = String(currentSSID)
        }
        return currentSSID
    }
}

class AttendanceScreen: UIViewController {

    @IBOutlet weak var networkname: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

Однако этот код:

self.networkname.text = String(currentSSID)

Вернет ошибку:

Type 'SSID' has no member 'networkname'

Итак, как я могу реализовать это в Swift для iOS 9? Заранее спасибо!


person Panda    schedule 22.01.2016    source источник
comment
Вы можете посмотреть здесь: codereview.stackexchange.com/questions/78318/   -  person luk2302    schedule 22.01.2016
comment
Пожалуйста, выполните поиск перед публикацией.   -  person rmaddy    schedule 22.01.2016
comment
Как мне отобразить SSID на этикетке, я не могу отобразить SSID, коды также показывают, как получить SSID. Спасибо за ваш быстрый ответ!   -  person Panda    schedule 22.01.2016
comment
Обновите свой вопрос с помощью соответствующего кода, который вызывает у вас проблемы. Установка свойства text для UILabel довольно тривиальна.   -  person rmaddy    schedule 22.01.2016


Ответы (1)


Я понял, что было бы намного проще создать мост от Swift к Objective-C.

Импорт фреймворка:

#import <SystemConfiguration/CaptiveNetwork.h>

Код для получения SSID подключенного Wi-Fi пользователя:

func getMAC()->(success:Bool,ssid:String,mac:String){

    if let cfa: NSArray = CNCopySupportedInterfaces() {
        for x in cfa {
            if let dict = CFBridgingRetain(CNCopyCurrentNetworkInfo(x as! CFString)) {
                let ssid = dict ["SSID"]!
                let mac  = dict["BSSID"]!
                return (true, ssid as! String, mac as! String)
            }
        }
    }
    return (false,"","")
}

При необходимости распечатайте и отобразите на этикетке:

let x = getMAC()
    if x.success {
        MAClabel = x.mac
        SSIDlabel = x.ssid
        print(x.mac)
        print (x.ssid)
    }

Я надеюсь, что те, кто задает этот вопрос, сочтут это полезным!

person Panda    schedule 23.01.2016