在另一个方法Swift中访问let / var

时间:2017-03-22 01:11:48

标签: ios swift core-bluetooth

我目前正在使用CoreBluetooth进行开发,并且我已经设法获得RSSI强度。我可以在控制台中打印它,但是当我想在IBAction中使用它时,它不会工作。我猜是因为RSSI var不是局部变量。

以下是我获得RSSI强度的方法:

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
    let device = (advertisementData as NSDictionary).object(forKey: CBAdvertisementDataLocalNameKey) as? String

    let rssi = RSSI // The const that stores the RSSI-data
    print(rssi)

    if device?.contains(BLE_NAME) == true {
        self.manager.stopScan()

        self.peripheral = peripheral
        self.peripheral.delegate = self

        manager.connect(peripheral, options: nil)
    }
}

这是我想要rssi const的IBAction:

@IBAction func btnPressed(_ sender: Any) {
    rssiLbl.text = "\(rssi)"
}

但是,我不知道如何使这项工作。我敢打赌,对于大多数人来说,这是一个非常基本的问题,但我无法使其发挥作用。

1 个答案:

答案 0 :(得分:0)

正如其他人所说。将rssi声明为类级变量:

private var rssi: NSNumber?

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
    let device = (advertisementData as NSDictionary).object(forKey: CBAdvertisementDataLocalNameKey) as? String

    self.rssi = RSSI
    print(self.rssi)

    if device?.contains(BLE_NAME) == true {
        self.manager.stopScan()

        self.peripheral = peripheral
        self.peripheral.delegate = self

        manager.connect(peripheral, options: nil)
    }
}

@IBAction func btnPressed(_ sender: Any) {
    if let rssi = self.rssi {
        rssiLbl.text = "\(rssi)"
    } else {
        rssiLbl.text = "Undetermined"
}