2016-12-25 10 views
-1

以下の配列を互いに比較する必要があります。しかし、forループとcellForItemAtIndexPathの範囲外のインデックスのインデックスを取得します。どのようにこれらの配列を比較し、UICollectionviewcellに3種類の色を割り当てるのですか? 3つのアレイのサイズは異なりますか?2つの異なるサイズの配列を比較し、UICollectionviewcellで色を比較する方法を比較しますか?

{ 
"success": 1, 
"time_slots": [ 
"10:00", 
"10:15", 
"10:30", 
"10:45", 
"11:00", 
"11:15", 
"11:30", 
"11:45", 
"12:00", 
"12:15", 
"12:30", 
"12:45", 
"13:00", 
"13:15", 
"13:30", 
"13:45", 
"14:00", 
"14:15", 
"14:30", 
"14:45", 
"15:00", 
"15:15", 
"15:30", 
"15:45", 
"16:00", 
"16:15", 
"16:30", 
"16:45", 
"17:00", 
"17:15", 
"17:30", 
"17:45", 
"18:00", 
"18:15", 
"18:30", 
"18:45", 
"19:00", 
"19:15", 
"19:30", 
"19:45", 
"20:00", 
"20:15", 
"20:30", 
"20:45", 
"21:00", 
"21:15" 
], 
"booked_time_slots": [ 

], 
"blocked_time_slots": [ 
"18:15", 
"18:30", 
"18:45", 
"19:00", 
"19:15", 
"11:15", 
"11:30", 
"11:45", 
"12:00" 
], 
"staff_detail": { 
    "staffId": "6", 
    "fname": "James Keri", 
    "image": "" 
    } 
} 

私は私のcellForRowに次のコードでIndex out of rangeエラーを取得しています:

var arrayOfSlotTime = [String]() 
var arrayOfBlockTime = [String]() 
let stringFirst = arrayOfSlotTime[indexPath.row] as? String 
let stringSecond = arrayOfBlockTime[indexPath.row] as? String 
if stringFirst == stringSecond { 
    cell.contentView.backgroundColor = Constant.color.theamColor 
} else { 
    cell.contentView.backgroundColor = Constant.color.blue 
} 
+0

_cellForRow_メソッドで何をしていますか? _tableViewDataSource_を共有してください。 – Adeel

+0

あなたはすでに回答があります。配列のサイズが異なる場合、配列を比較することはできません。 – Adeel

+0

いずれかの代替はハックであり、余分な注意が必要です。 – Adeel

答えて

1

あなたの問題は、そのあなたがちょうど2つの空の配列を作成していること、およびその要素にアクセスしようとするよりも。

あなたがこれを行うとき:両方の配列はゼロの数を持っている

var arrayOfSlotTime = [String]() 
var arrayOfBlockTime = [String]() 

、それに要素が含まれていません。そして、Uこのときより:

let stringFirst = arrayOfSlotTime[indexPath.row] as? String 
let stringSecond = arrayOfBlockTime[indexPath.row] as? String 

あなたはindexPath.rowのどのような値に要素にアクセスしようとしています。しかし、あなたのコンテナは空であり、そこに要素がないので、Index out of rangeエラーでクラッシュします。

私はarrayOfSlotTimearrayOfBlockTimeはどこか別の場所にあると仮定しています。空であってはいけません。

EDIT:配列は、あなたの質問の冒頭でJSONからの値が含まれてい

場合は、単にファイルを見てください。 time_slotsarrayOfSlotTimeには45個のアイテムがあり、blocked_time_slotsにはarrayOfBlockTimeのアイテムが8個あります。あなたは二つの配列に基づいて、細胞上のいくつかの変換が与えられたのと同じ値を持っていませんしたい場合は、[0...7]

からの要素を持っているので、あなたは、8の値が、Index out of rangearrayOfBlockTimeクラッシュでindexPath.rowにアクセス

indexPathの場合は、次の操作を行います。

// Lets create the first string with the rigth indexPath value 
let slotTime = arrayOfSlotTime[indexPath.row] as? String ?? "" 
// Check if arrayOfBlockTime has the slotTime at the indexPath, and apply the color to a new variable 
let backgroundColor = arrayOfBlockTime.contains(slotTime) ? Constant.color.theamColor : Constant.color.blue 
// Assign the background color 
cell.contentView.backgroundColor = backgroundColor 
+0

いいえ、私は唯一の例を与えている、とコメントスペースは、私はいずれかがその配列内の指定された値を超える想像思った「time_slots」less.Soです。[] = arrayOfSlotTimeと 「blocked_time_slots」:[] = arrayOfBlockTimeは値ということがあります。 –

+0

私の答えを編集しました。 – dirtydanee

+0

おかげでdanee、私は私の答えを得た。そして私は3つの異なる配列の私の色を持っています。 –

関連する問題