Перечислите устройства, которые находятся в зоне действия устройства Bluetooth в 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()
Я только начинаю работать с Bluetooth под OSX, и все, что мне сейчас нужно, это список доступных устройств.
Кажется, он не вызывает мой метод делегата вообще.
Я новичок в разработке OSX и Swift, так что будьте осторожны.:)
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()
Хотя вышеприведенный подход работает, я считаю, что проще создавать простые традиционные тестовые проекты для задач, которые требуют таких понятий, как асинхронный код, делегирование,...