2017-11-29 1 views
0

복사하지 않고 Data에서 String을 만들고 싶습니다. 내가 사용하려고 시도했습니다 String(bytesNoCopy:UnsafeMutableRawPointer, length:Int, encoding:String.Encoding, freeWhenDone:Bool)복사하지 않고 데이터에서 문자열

아무리 노력해도 항상 nil을 반환합니다. String(bytes:..., encoding:...)을 사용하여 생성하면 성공합니다.

바이트를 복제하지 않고 Data 개체에서 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) 
+1

을 포함하여 실제 코드를 표시하는 모든 관련 데이터 액세스. – rmaddy

답변

0

I가 작동하는 방법을 발견 : 그것에서 오는 어떤 내가 시도한 경우 여기

이다

... 
// 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) 
} 
관련 문제