SwiftでNSStringからNSDataを作成する


174

私は最終的にNSMutableURLRequest有効なを使用しようとしていますがHTTPBody、(からのUITextField)文字列データを使用可能なNSDataオブジェクトに取得できないようです。

私は他の方法でこの方法を見てきました:

NSString(data data: NSData!, encoding encoding: UInt)

しかし、私は私のユースケースのドキュメントを見つけることができないようです。必要に応じて文字列を他のタイプに入れることは自由ですが、NSDataSwift を使用するための初期化オプションはどれも探しているようには見えません。

回答:


359

Swift 3で

let data = string.data(using: .utf8)

Swift 2(またはすでにNSStringインスタンスがある場合)

let data = string.dataUsingEncoding(NSUTF8StringEncoding)

Swift 1の場合(またはSwiftがある場合String):

let data = (string as NSString).dataUsingEncoding(NSUTF8StringEncoding)

また、これ dataOptional<NSData>(変換が失敗する可能性があるため)なので、使用する前にラップを解除する必要があります。たとえば、次のようにします。

if let d = data {
    println(d)
}

SwiftはNSDataタイプを推測できますか?
Nicolas Manzini、2014年

@NicolasManziniは、他のタイプと同様に、できることを確認します。
ガブリエレペトロネラ2014年

2
@macdonjoうん、そのAPIは時間とともに変化し、今ではを返しますOptional<NSData>。これを使用する前にアンラップする必要があります
Gabriele Petronella

3
それは自動的にブリッジされますので、Swift2では、キャスト「として」を使用する必要はありません
ジャッキー

1
UTF-8への変換失敗しないので、オプションのバインディングは実際には必要ありません。ここで強制的にアンラップできます。
Martin R

33

Swift 4および3

DataオブジェクトからのStringオブジェクトの作成がSwift 3で変更されました。正しいバージョンは次のとおりです。

let data = "any string".data(using: .utf8)

ありがとう。これはSwift 3で完璧に機能しました。let input = "test string" let xdata = input.data(using:String.Encoding.utf8)
raddevus

1
String(data:data!、encoding:.nonLossyASCII)がnilになる理由は何ですか?
Happiehappie


4

スウィフト4

let data = myStringVariable.data(using: String.Encoding.utf8.rawValue)

NSStringSwift では使用しないでください。
vadian

3
// Checking the format
var urlString: NSString = NSString(data: jsonData, encoding: NSUTF8StringEncoding)

// Convert your data and set your request's HTTPBody property
var stringData: NSString = NSString(string: "jsonRequest=\(urlString)")

var requestBodyData: NSData = stringData.dataUsingEncoding(NSUTF8StringEncoding)!

2

オプションではないデータを作成するには、それを使用することをお勧めします。

let key = "1234567"
let keyData = Data(key.utf8)

1
Swift 3以降では、これが最も効率的な方法です。
バディアン

2

Swift 4.2

let data = yourString.data(using: .utf8, allowLossyConversion: true)


0

文字列をデータに変換

extension String {
    func toData() -> Data {
        return Data(self.utf8)
    }
}

データを文字列に変換

extension Data {
      func toString() -> String {
          return String(decoding: self, as: UTF8.self)
      }
   }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.