Swift 2.0
String(data:encoding:)
インポート時にSwift 2.0が実際にをString拡張として導入したようですFoundation
。奇妙なことに、これが文書化されている場所は見つかりませんでした。
(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)
このアプローチの問題点は、私は、このように、私は、バイトの量を複製だ、新しいアレイに情報のコピーを作成していことである(具体的に:encoding size * data.length
)