2016-12-16 11 views
5

こんにちは私は速やかに新しいです、私はチュートリアルに従っており、画像をアップロードするために同じコードを作成しています。私は現在スイフト3を使用しています。NSMutableData()はもはやを持っていません。appendStringメソッドが利用できます。代用として何ができますか?私は、次の午前のチュートリアルはここhttp://swiftdeveloperblog.com/image-upload-example/で、私のコードは、このiOS swift NSMutableDataにはメンバーがありませんappendString

func createBodyWithParameters(parameters: [String: String]?, filePathKey: String?, imageDataKey: NSData, boundary: String) -> NSData { 
     let body = NSMutableData() 

     if parameters != nil { 
      for (key, value) in parameters! { 
       body.("--\(boundary)\r\n") 
       body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n") 
       body.appendString("\(value)\r\n") 
      } 
     } 

     let filename = "user-profile.jpg" 
     let mimetype = "image/jpg" 

     body.appendString(options: <#T##NSData.Base64EncodingOptions#>)("--\(boundary)\r\n") 
     body.appendString("Content-Disposition: form-data; name=\"\(filePathKey!)\"; filename=\"\(filename)\"\r\n") 
     body.appendString("Content-Type: \(mimetype)\r\n\r\n") 
     body.appendString("\r\n") 



     body.appendString("--\(boundary)--\r\n") 

     return body 
    } 

再び問題がappendStringであるである私はエラーを取得していますよう:タイプの

値がNSMutableDataはをappendString何のメンバーを持っていません

私は回避策を探していましたが、見つからなかったため、というメソッドを追加できましたが、文字列は使用されません。

+1

'NSMutableData'は' appendString'方法がありませんでした、あなたが見ているチュートリアルでは、そのソースコードの下部に延長して、そのメソッドを追加します。 – dan

答えて

11

コメントで@danが指摘しているように、このメソッドはあなたが見ているチュートリアルの一部です。 Swiftではカスタムメソッドを定義しなくても簡単です。

まず、NSMutableDataを使用しないでください。 (他にはあり

body.append(Data("foo".utf8)) 

:UTF-8バイトを追加する次に

var body = Data() 

:代わりに、あなたはvarletを使用するかどうかに応じて可変または不変のどちらかになります新Data構造体を、使用String UTF-8以外のものが必要な場合は、他のエンコーディングのメソッドを参照してください)。

チュートリアルの正確な動作が必要な場合は、そのメソッドをSwift 3:

extension Data { 
    mutating func append(string: String) { 
    let data = string.data(
     using: String.Encoding.utf8, 
     allowLossyConversion: true) 
    append(data!) 
    } 
} 

… 

body.append("foo") 

ただし、このコードは2つの理由からお勧めできません。まず、損失の多い変換は、アプリが重要なデータを黙って破棄することを意味します。次に、アンラップ(data!の代わりにdata)を使用すると、エンコードの問題が発生した場合、有用なエラーを表示する代わりにアプリケーションがクラッシュすることになります。ウィズ・ミー

+0

データの拡張を強制的に解除しないでください。データ{ func append(string:String){ を保護しましょう(.utf8、allowLossyConversion:true)else {return} append(data) } } ' –

+0

@Leo:黙ってエラーを無視することは、おそらくはクラッシュよりも_ワース_です。正しい方法は状況によって異なります。文字列がエンコード可能でない場合は、(1)何もしないでアプリを続行させ、(2)エラーが発生していないため、すべてを停止するか、 (3)ユーザーにエラーを表示するなど、何らかのリカバリー・アクションを取るか? –

1
extension NSMutableData { 

    func appendString(_ string: String) { 
     let data = string.data(using: String.Encoding.utf8, allowLossyConversion: true) 
     append(data!) 
    } 
} 

この作品スウィフトは3

関連する問題