Swift 不复制数据的字符串

Swift 不复制数据的字符串,swift,string,Swift,String,我想从数据创建一个字符串,无需复制。我一直在尝试使用 String(bytesnopy:UnsafeMutableRawPointer,length:Int,encoding:String.encoding,freeWhenDone:Bool) 无论我如何尝试,它总是返回零。如果我使用String(字节:…,编码:…)创建它,它会成功 是否有一种方法可以尝试从数据对象创建字符串,而不复制字节 以下是它的来源和我的尝试: ... // get the data. This succeeds

我想从
数据
创建一个
字符串
,无需复制。我一直在尝试使用
String(bytesnopy:UnsafeMutableRawPointer,length:Int,encoding:String.encoding,freeWhenDone:Bool)

无论我如何尝试,它总是返回零。如果我使用
String(字节:…,编码:…)
创建它,它会成功

是否有一种方法可以尝试从
数据
对象创建
字符串
,而不复制字节

以下是它的来源和我的尝试:

 ...
 // get the data. This succeeds
 guard var data = try? Data(contentsOf: url, options: .mappedIfSafe) else {
        return .failed
 }

 //Tried: 
 let ptr = UnsafeMutableRawPointer(&data)
 let str = String(bytesNoCopy: ptr, length: data.count, encoding: .utf8, freeWhenDone: false)

通过再次尝试,我发现了一种行之有效的方法:

 ...
 // get the data. This succeeds
 guard var data = try? Data(contentsOf: url, options: .mappedIfSafe) else {
        return .failed
 }


 data.withUnsafeMutableBytes { (ptr: UnsafeMutablePointer<UInt8>) -> Void in
        let unsafePtr = UnsafeMutableRawPointer(ptr)
        // This is now working
        let str = String(bytesNoCopy: unsafePtr, length: data.count, encoding: .utf8, freeWhenDone: false)
 }
。。。
//获取数据。这成功了
guard var data=try?数据(内容:url,选项:.mappedIfSafe)其他{
返回。失败
}
data.withUnsafeMutableBytes{(ptr:UnsafeMutablePointer)->中的Void
让unsafePtr=UnsafeMutableRawPointer(ptr)
//这是现在的工作
let str=String(bytesnopy:unsafePtr,长度:data.count,编码:.utf8,freewwhendone:false)
}

通过再次尝试,我找到了一种有效的方法:

 ...
 // get the data. This succeeds
 guard var data = try? Data(contentsOf: url, options: .mappedIfSafe) else {
        return .failed
 }


 data.withUnsafeMutableBytes { (ptr: UnsafeMutablePointer<UInt8>) -> Void in
        let unsafePtr = UnsafeMutableRawPointer(ptr)
        // This is now working
        let str = String(bytesNoCopy: unsafePtr, length: data.count, encoding: .utf8, freeWhenDone: false)
 }
。。。
//获取数据。这成功了
guard var data=try?数据(内容:url,选项:.mappedIfSafe)其他{
返回。失败
}
data.withUnsafeMutableBytes{(ptr:UnsafeMutablePointer)->中的Void
让unsafePtr=UnsafeMutableRawPointer(ptr)
//这是现在的工作
let str=String(bytesnopy:unsafePtr,长度:data.count,编码:.utf8,freewwhendone:false)
}

显示您的实际代码,包括所有相关数据访问。显示您的实际代码,包括所有相关数据访问。