2015-11-27 4 views
0

Я создал массив ленивого вара:Swift индекса доступа из

lazy var info : [[String: AnyObject?]] = { 

     var dictionary = [[String: AnyObject?]]() 
     dictionary["Key1"] = ["A", "B", "C"] 
     dictionary["Key2"] = ["D", "E", "F"] 

     return dictionary 
    }() 

, а затем называю это позже в titleForHeaderInSection следующим образом:

self.info[section] 

, но это приводит к следующей ошибке:

не может индексировать значение типа '[[String: AnyObject]?]

в случае, если это не Работа?

ответ

2

Поскольку ваш код написан, вы создаете словарь со строковыми клавишами и значениями [String].

Так self.info["Key1"] вернется ["A", "B", "C"] Тогда вы можете сделать:

self.info["Key1"]![0] // "A" 

Примечание: вам нужно разворачивать возвращаемое значение из словаря, как это может быть Nil

4

У вас есть там словарь, не массив. В вашем словаре есть массив для каждого ключа, но сам словарь не является массивом. Таким образом, все ключи являются строками (в вашем случае «Key1» и «Key2»), но вы пытаетесь передать целое число - «раздел». Вместо того, чтобы: self.info[section] Вы должны использовать: self.info["Key1"]![section]

+0

Это не словарь. –

+0

Кажется, вы теперь отредактировали свой ответ как массив, а не словарь, как это было вначале, когда я ответил. У вас теперь есть недействительный инициализатор, когда вы создаете массив, возвращая массив, в который вы устанавливаете «ключи», но массивы не имеют ключей. Кажется, вы смешиваете свои массивы и словари и должны точно определить, какой тип данных вам нужен, и соответствующим образом задайте значения. –