'bytes'不可用:请改用withUnsafeBytes

13

之前在Swift 2.2中工作的代码现在在Swift 3中抛出以下错误:

输入图片描述

这是我的代码:

let tempData: NSMutableData = NSMutableData(length: 26)!
tempData.replaceBytes(in: NSMakeRange(0, data.count), withBytes:data.bytes)

我应该用什么来替换"data.bytes"以解决错误?我尝试了实施“withUnsafeBytes”,并查看了Apple的文档,但无法理解!


你没有提供data的来源,但如果你能将其转换为Data,这将会更简单,而且你也不需要在NSMutableDataData之间进行桥接。你只需要使用replaceSubrange即可。 - Rob Napier
2个回答

13

假设 data 的类型为 Data,以下代码应该可以正常工作:

let tempData: NSMutableData = NSMutableData(length: 26)!
data.withUnsafeBytes { 
    tempData.replaceBytes(in: NSMakeRange(0, data.count), withBytes: $0)
}

使用

/// Access the bytes in the data.
///
/// - warning: The byte pointer argument should not be stored and used outside of the lifetime of the call to the closure.
public func withUnsafeBytes<ResultType, ContentType>(_ body: @noescape (UnsafePointer<ContentType>) throws -> ResultType) rethrows -> ResultType

Data 的方法。在闭包内部,$0 是一个指向字节的 UnsafePointer<Void>(在 Xcode 8 beta 6 中是 UnsafeRawPointer)。


@TejasArdeshna:那就是Swift 3。 - Martin R
为什么长度硬编码为26?对于大数据会有问题吗?我是iOS的新手,只是确认一下。 - Rajdeep Paliwal
1
@Ritchierich:数字26来自问题中的代码。只要您的设备有足够的内存,就没有问题。 - Martin R

0

使用这个:

        let data:Data = Data()
        let myDataBytes = data.withUnsafeBytes {_ in
            UnsafePointer<UInt8>(data.withUnsafeBytes({
                $0
            }))
        }
        let writtenBytes = writeStream.write(.init(myDataBytes), maxLength: data.count)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接