2016-09-06 12 views
0

イメージを2次元配列に追加しようとしています。これは私が今やっているところです:配列がイメージを追加しない

var imgArr1: [UIImage] = [] 
var imgArr2: [UIImage] = [] 

var allArrays = [imgArr1, imgArr2] 

for array in 0 ..< allArrays.count { 
    for i in categories { //list of folder names used below 
     for img in fileNames("path/to/my/images/i") { //fileNames() returns all the files' names it finds in the folders 
      print(img) //this does print out the correct file names, for instance: "img_1.jpg" 
      allArrays[array].append(UIImage(named: img)) 
     } 
    } 
} 
print(imgArr1) //this prints: "[]"` 

ループとカスタム機能が動作していると仮定できます。 (コード内のコメントに注意してください:イメージ名は正しく出力されます)insert at indexのような新しいイメージを追加し、+=のような他の方法を使ってみました。

アイデア?
ありがとうございます!

+1

私の推測では、 'UIImageが(という名前のことです。これを行う方法の一例として、あなたが外側の配列のインデックスをループとは、添字を使用して、内部の配列を変更することができます。 img) 'は動作しません。代わりに 'imageWithContentsOfFile:'を使用してください。これは、パラメータとして使用しているイメージ名ではないパスです。 – Larme

+0

私はそれも問題かもしれないと思ったが、私が 'print(UIImage(named:img))'を実行すると、イメージのプロパティ(少なくともいくつかの数とサイズ)を出力する。私はまた、ファイル名の拡張子を付けて試しました。 – LinusGeffarth

+0

ここで問題となるのは、スワイプ配列は値型で、常にコピーされます。あなたが 'allArrays'をチェックすると画像は含まれますが、imgArr1は空です。 – Aks

答えて

2
for var array in allArrays 

は、配列の可変コピーを作成します。配列は値型であるため、元の配列に追加することはできません。これを行うには、画像をimgArr1(またはimgArr2、またはその両方)に直接追加する必要があります。

編集

var all: [[Int]] = [[], [], []] 

for arrayIndex in 0 ..< all.count { 
    for number in 0 ..< 10 { 
     all[arrayIndex].append(number) 
    } 
} 

print(all.first!.count) // 10 
+0

しかし、 'var'を削除すると文句を言います。だから、私はどのようにコピーの内容を取って元のものに割り当てるつもりですか? – LinusGeffarth

+0

オリジナルに直接追加する必要があります。 –

+0

是非。それを行う方法があるはずです。私は13の配列を持っている、私はそれぞれのforループを作ることができない!私は 'for LinusGeffarth

関連する問題