Swift 3 对 getBytes 方法的更改

Posted

技术标签:

【中文标题】Swift 3 对 getBytes 方法的更改【英文标题】:Swift 3 changes for getBytes method 【发布时间】:2016-06-29 11:02:31 【问题描述】:

我尝试在 swift 3 中运行以下代码

 var values = [UInt8](count:data!.length, repeatedValue:0)
 data!.getBytes(&values, length:data!.length)

其中数据是“数据”数据类型(NSData 根据 swift 3 准则更改为“数据”)

我无法在 Swift 3 中运行上述代码。编译器给出“参数重复值必须在参数之前”的错误。同一行代码在 Swift 2.2 中运行

解决办法是什么?

【问题讨论】:

虽然问题略有不同,但答案应该相同:***.com/questions/38090320/… 【参考方案1】:

对于 Swift3,只需使用以下内容:

let array = [UInt8](yourDataObject)

就是这样,伙计们!)

【讨论】:

你如何使用这个?我正在尝试从 Objective-C 转换以下内容: int16_t value = 0; CGFloat 结果 = NAN; if (tempCharacteristic) [[tempCharacteristic value] getBytes:&value length:sizeof (value)];结果 = (CGFloat) 值 / 10.0f; // tempCharacteristic 是一个 CBCharacteristic 恐怕要达到预期的效果,您需要执行几个步骤。不幸的是,我对 CB 没有太多经验,但正如我所见,您需要 Int16 值,然后将其除以得到 Float。从我的角度来看,您可以通过以下方式达到此目的: let bytes = [UInt8](tempCharacteristic.value);让指针 = UnsafePointer(字节);让 fPointer = pointer.withMemoryRebound(to: Int16.self, capacity: 2) return $0 ;让值 = Int16(fPointer.pointee);希望这可以帮助。 (当然删除所有分号;)) 非常感谢您的指点,@sVd。我仍然无法转换 sn-p - 你介意看看我的问题吗? ***.com/questions/45287488/… 我明白了,@Surz,您找到了正确答案。抱歉,我只是在没有编译器的情况下从头开始编写了我的 sn-p。干杯! )【参考方案2】:

这意味着在 Swift 3 中参数顺序已经颠倒了。

对于 NSData:

var values = [UInt8](repeating:0, count:data!.length)
data.getBytes(&values, length: data!.length)

对于数据:

var values = [UInt8](repeating:0, count:data!.count)
data.copyBytes(to: &values, count: data!.count)

【讨论】:

这是 Swift 3 的早期版本。对于当前的 Swift 3 和 Swift 4,你应该使用 @svd 的答案。

以上是关于Swift 3 对 getBytes 方法的更改的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3 Eureka Forms 更改按钮行字体颜色

给出字符串分别计算出字符串中数字大小写字母的个数。(两种方法 getBytes( ) charAt( ) )

对成员“下标”Swift 3 的模糊引用

Firebase 存储中的“getBytes()”和“getStream()”方法有啥区别?

如何在 swift 3 中使用 addTarget 方法

如何在swift 3中使用addTarget方法