스위프트 2.0
Swift 2.0은 실제로 String(data:encoding:)
가져올 때 String 확장으로 도입 한 것 같습니다 Foundation
. 나는 이것이 이상하게 문서화 된 곳을 찾지 못했습니다.
(pre Swift 2.0) 경량 확장
를 사용하지 않고 복사하여 붙여 넣을 수있는 작은 확장명이 NSString
있습니다. 중간자를 잘라 봅시다.
import Foundation
extension NSData
{
var byteBuffer : UnsafeBufferPointer<UInt8> { get { return UnsafeBufferPointer<UInt8>(start: UnsafeMutablePointer<UInt8>(self.bytes), count: self.length) }}
}
extension String
{
init?(data : NSData, encoding : NSStringEncoding)
{
self.init(bytes: data.byteBuffer, encoding: encoding)
}
}
// Playground test
let original = "Nymphs blitz quick vex dwarf jog"
let encoding = NSASCIIStringEncoding
if let data = original.dataUsingEncoding(encoding)
{
String(data: data, encoding: encoding)
}
또한 data.byteBuffer
시퀀스 유형에 액세스 할 수 reduce { $0 &+ $1 }
있으므로 체크섬에 대한 작업과 같이 시퀀스로 수행 할 수있는 모든 멋진 작업도 작동 합니다.
노트
이전 편집 에서이 방법을 사용했습니다.
var buffer = Array<UInt8>(count: data.length, repeatedValue: 0x00)
data.getBytes(&buffer, length: data.length)
self.init(bytes: buffer, encoding: encoding)
이 방식의 문제점은 I 따라서, I 바이트의 양을 복제하고있어, 새로운 배열 정보의 사본을 만들 야한다는 것이다 (즉 : encoding size * data.length
)