我在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的新手,所以要保持柔和。:)
要告诉Playground您的代码在后台执行某些操作,您必须import XCPlayground调用并调用XCPSetExecutionShouldContinueIndefinitely()。 这将使IOBluetoothDeviceInquiry在Playground中保持活动状态,并允许它在完成后调用委托方法。
import XCPlayground
XCPSetExecutionShouldContinueIndefinitely()
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()
尽管上述方法有效,但我发现为需要异步代码,委托等概念的任务创建简单的传统测试项目更加容易。