无法让Core Bluetooth在Swift iOS游乐场中工作

时间:2015-01-08 16:02:58

标签: ios swift bluetooth

我是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。这也行不通。我做错了什么?

谢谢。

4 个答案:

答案 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)

XCPSetExecutionShouldContinueIndefinitelyPlaygroundPage.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中通常可以做的所有事情,但是我认为简单的事情仍然很有趣。