我是swift的新手。我无法在操场上获得对centralManagerDidUpdateState :: w /的回调(即:我认为初始化会回调到centralManagerDidUpdateState):
import CoreBluetooth
class BTDiscovery:NSObject,
CBCentralManagerDelegate {
func centralManagerDidUpdateState(central: CBCentralManager!) {
println("here")
}
}
var bt = BTDiscovery()
iOS Swift游乐场支持Core Bluetooth吗? 我试过这个OSX游乐场和IOBluetooth。这也行不通。我做错了什么?
谢谢。
答案 0 :(得分:2)
我认为你遇到的是游乐场本质上是同步的,而蓝牙发现是异步的。为了使它能够工作,你需要在游乐场添加一些东西以允许异步操作:
import XCPlayground
XCPSetExecutionShouldContinueIndefinitely(continueIndefinitely: true)
另请注意,由于iOS游乐场在模拟器上运行,我不一定希望CB能够在那里工作。
您还有更多基本问题,因为您没有采取任何措施来实际触发发现。您需要创建CBCentralManager
的实例并使用它来驱动发现过程:
import Cocoa
import XCPlayground
import CoreBluetooth
class BTDiscovery:NSObject, CBCentralManagerDelegate {
func centralManagerDidUpdateState(central: CBCentralManager!) {
println("here")
}
}
var bt = BTDiscovery()
var central = CBCentralManager(delegate: bt, queue: dispatch_get_main_queue())
XCPSetExecutionShouldContinueIndefinitely(continueIndefinitely: true)
答案 1 :(得分:1)
您只能在实际的iOS设备上使用Core Bluetooth;它在模拟器中不受支持,并且在Playground中不支持,因为它也在Mac上而不是在iOS设备上执行。
答案 2 :(得分:0)
XCPSetExecutionShouldContinueIndefinitely
或PlaygroundPage.current.needsIndefiniteExecution
都将起作用。
请记住,CoreBluetooth仅在设备上起作用。这表示目前无法在Playground上运作。
答案 3 :(得分:0)
可以在Swift Playground中使用蓝牙。请注意,您必须使用PlaygroundBluetooth
。您可以在Documentation Framework PlaygroundBluetooth
这是使用中央扫描方式。
let managerDelegate: PlaygroundBluetoothCentralManagerDelegate = <# manager delegate instance #>
let manager = PlaygroundBluetoothCentralManager(services: nil)
manager.delegate = managerDelegate
请注意,PlaygroundBluetooth
只是CoreBluetooth
的子集,因此您无法完成CoreBluetooth
中通常可以做的所有事情,但是我认为简单的事情仍然很有趣。