swift中的打印不会以\ n结束

时间:2016-01-31 23:12:29

标签: ios swift printing bluetooth

我正在使用Xcode 7,swift 2在iOS 9上使用蓝牙。

我使用蓝牙接收值,我想在调试时打印。

这是我的代码:

func peripheral(peripheral: CBPeripheral, didUpdateValueForCharacteristic characteristic: CBCharacteristic, error: NSError?) {

    IncomingBLE = NSString(data: characteristic.value!, encoding: NSASCIIStringEncoding)!
    print(IncomingBLE, separator: ";", terminator: "\n")
    print("") }

在我的调试中我得到了这个:

Humidity50.00Temp30.00BatLevel80
Humidity
50.00Temp30.00BatLevel80Humidity50.00Temp
30.00
BatLevel80Humidity50.00

有时会出现换行符,但通常不在此处。是什么原因?

1 个答案:

答案 0 :(得分:2)

由于didUpdateValueForCharacteristic是异步调用的。当值快速更新时,数据可能会在控制台上交织在一起。您可以尝试在主队列上调度打印,因为这是一个串行调度队列;

func peripheral(peripheral: CBPeripheral, didUpdateValueForCharacteristic characteristic: CBCharacteristic, error: NSError?) {

    IncomingBLE = NSString(data: characteristic.value!, encoding: NSASCIIStringEncoding)!
    dispatch_async(dispatch_get_main_queue()) { () -> Void in
        print(IncomingBLE, separator: ";", terminator: "\n")
    }
 }

更新

出于调试目的,NSLog语句可以更可靠;

func peripheral(peripheral: CBPeripheral, didUpdateValueForCharacteristic characteristic: CBCharacteristic, error: NSError?) {

    IncomingBLE = NSString(data: characteristic.value!, encoding: NSASCIIStringEncoding)!
    dispatch_async(dispatch_get_main_queue()) { () -> Void in
        NSLog(IncomingBLE.description)
    }
}

它甚至可以在没有dispatch_async

的情况下工作