来自UInt8的NSData

我最近在swift中找到了一个源代码,我试图将它变为Objective-C。 我无法理解的一件事是:

var theData:UInt8! theData = 3; NSData(bytes: [theData] as [UInt8], length: 1) 

有人可以帮我提供Obj-C等价物吗?

为了给你一些上下文,我需要将UInt8作为UInt8发送到CoreBluetooth外设(CBPeripheral)。 浮点或整数不起作用,因为数据类型太大。

如果你写Swift代码稍微简单一点

 var theData : UInt8 = 3 let data = NSData(bytes: &theData, length: 1) 

那么将它转换为Objective-C是相对简单的:

 uint8_t theData = 3; NSData *data = [NSData dataWithBytes:&theData length:1]; 

对于多个字节,您将使用数组

 var theData : [UInt8] = [ 3, 4, 5 ] let data = NSData(bytes: &theData, length: theData.count) 

转换为Objective-C as

 uint8_t theData[] = { 3, 4, 5 }; NSData *data = [NSData dataWithBytes:&theData length:sizeof(theData)]; 

(并且您可以在最后一个语句中省略address-of运算符,例如,请参见数组的地址如何等于其在C中的值? )。

Swift 3中

 var myValue: UInt8 = 3 // This can't be let properties let value = Data(bytes: &myValue, count: MemoryLayout.size)