2017-04-11 12 views
1

データと文字列の両方を配列に格納することは可能でしょうか? ユーザーが画像内の画像名と共に配列を選択して保存する方法が必要です。後でアップロードするときにAPIリクエストに追加することができます。Swift iosデータと文字列を配列に格納

今、私は私が後で

var imgArray = [(Data, String)]() 

へのデータと文字列を追加し、配列の組を使用していますそして、私はこのようなその配列タプルにデータを追加します。

if let firstImage = self.firstImage { 
       if let firstImageData = firstImage.compressImage() { 
        self.imgArray.append(firstImageData, self.randomImageName(length: 15)) 
       } 

私は上記のコードを使用しますユーザーがアップロードしたすべての画像は正常に動作しますが、imgArrayには後でAPIに送信するDataとStringの両方が設定されます。

しかし、データと文字列の値を格納する配列を使用する方法はありますか?

私はタプルが最善の解決策 }

+0

によってメンバーを取得することです。どのように配列から文字列とデータを引き出していますか? – BallpointBen

+0

@BallpointBen例:文字列を引き出す: '' parameters ["images"] = imgArray.map {$ 0.1} '' – Kiow

答えて

3

Appleがデータソースとしてタプルを使用してから意欲あるかどうかわからないです。

タプルは、関連する値の一時的なグループに役立ちます。複雑なデータ構造の作成には適していません。あなたのデータ構造は一時的な範囲を超えて存続する可能性がある場合は、クラスまたは構造体としてではなく、タプル


などのモデル、それを(オブジェクト指向)スウィフトの方法は、構造体です:

struct ImageData { 
    var data : Data 
    var name : String 
} 

var imgArray = [ImageData]() 

if let firstImage = self.firstImage { 
    if let firstImageData = firstImage.compressImage() { 
     self.imgArray.append(ImageData(data:firstImageData, name:self.randomImageName(length: 15)) 
    } 

利点は、文字列はユニーク行うことができる場合には、辞書が移動するための方法であるかもしれない名前

let imageName = imgArray[0].name 
+0

素晴らしい答えと素晴らしい例。しかし、私は上記のタプルをブログ投稿用のアップロードフォームとしてのみ使用しています。ユーザーはテキストを入力し、いくつかの画像を追加してから、アップロードと完了を押​​します。これは「関連する値の一時的なグループ」としてカウントされません – Kiow

+0

もちろん、タプルを使用することもできますが、Appleのステートメントは必要以上のものです。しかし、コードの読みやすさのためにも構造体を好むでしょう。 – vadian

関連する問題