一尘不染

列出Swift中蓝牙设备范围内的设备

swift

我在Xcode 6操场上有以下代码:

import Cocoa
import IOBluetooth

class BlueDelegate : IOBluetoothDeviceInquiryDelegate {
    func deviceInquiryComplete(sender: IOBluetoothDeviceInquiry, error: IOReturn, aborted: Bool) {
        aborted
        var devices = sender.foundDevices()
        for device : AnyObject in devices {
            if let thingy = device as? IOBluetoothDevice {
                thingy.getAddress()
            }
        }
    }
}

var inquiry = IOBluetoothDeviceInquiry(delegate: BlueDelegate())
inquiry.start()

我刚刚开始在OSX下使用蓝牙,而我目前想要的只是一系列设备清单。

它似乎根本没有调用我的委托方法。

我是OSX开发和Swift的新手,所以要保持柔和。:)


阅读 291

收藏
2020-07-07

共1个答案

一尘不染

要告诉Playground您的代码在后台执行某些操作,您必须import XCPlayground调用并调用XCPSetExecutionShouldContinueIndefinitely()
这将使IOBluetoothDeviceInquiry在Playground中保持活动状态,并允许它在完成后调用委托方法。

import Cocoa
import IOBluetooth
import XCPlayground

class BlueDelegate : IOBluetoothDeviceInquiryDelegate {
    func deviceInquiryComplete(sender: IOBluetoothDeviceInquiry, error: IOReturn, aborted: Bool) {
        aborted
        println("called")
        var devices = sender.foundDevices()
        for device : AnyObject in devices {
            if let thingy = device as? IOBluetoothDevice {
                thingy.getAddress()
            }
        }
    }
}

var delegate = BlueDelegate()
var inquiry = IOBluetoothDeviceInquiry(delegate: delegate)
inquiry.start()
XCPSetExecutionShouldContinueIndefinitely()

尽管上述方法有效,但我发现为需要异步代码,委托等概念的任务创建简单的传统测试项目更加容易。

2020-07-07