2014-11-08 6 views
3

Я очень новичок в Swift. У меня есть контроллер представления таблицы, в которой я заявил следующее:Swift: Создать массив значений словаря

var parts = [String:[String]]() //Key: String, Value: Array of Strings 
var partsSectionTitles = [String]() 

В моей функции viewDidLoad, у меня есть:

parts = [ 
     "Part 1" : ["1", "2", "3"], 
     "Part 2" : ["1", "2"], 
     "Part 3" : ["1"] 
    ] 

//Create an array of the keys in the parts dictionary 
partsSectionTitles = [String](parts.keys) 

В моей функции cellForRowAtIndexPath, у меня есть:

let cell = tableView.dequeueReusableCellWithIdentifier("TableCell", forIndexPath: indexPath) as UITableViewCell 

var sectionTitle: String = partsSectionTitles[indexPath.section] 
var secTitles = parts.values.array[sectionTitle] 

cell.textLabel.text = secTitles[indexPath.row] 

Я пытаюсь создать массив, secTitles, состоящий из значений из словаря деталей, соответствующих клавишам, sectionTitle. Тем не менее, я получил сообщение об ошибке:

«Строка» является не трансформируемая в «Int»

я был в состоянии сделать это в Objective-C:

NSString *sectionTitle = [partsSectionTitles objectAtIndex:indexPath.section]; 
NSArray *secTitles = [parts objectForKey:sectionTitle]; 

Кроме того, я хотел бы узнайте, смогу ли я добавить/удалить значения в массивах и словарях позже. Другими словами, они изменяемы? Я прочитал несколько статей, в которых говорится, что массивы Swift и словари на самом деле не изменяемы. Я просто хотел знать, сможет ли кто-нибудь подтвердить это. Заранее благодарю вас за ваши ответы.

ответ

3

Вы просто не нужны values.array:

var chapterTitles = partsOfNovel[sectionTitle]! 

Массивы внутри словарей может мутировать до тех пор, как словарь сам по себе является изменяемым, но вам нужно назначить через разворачивание оператора:

if partsOfNovel[sectionTitle] != nil { 
    partsOfNovel[sectionTitle]!.append("foo") 
} 
+0

Результат не обязательно - вы можете использовать '!' Для принудительного разворота, если вы уверены, что ключ действителен, или используйте необязательную привязку или оператор коалесценции nil, чтобы развернуть его, если вы этого не сделали. (Ответ теперь показывает разворот силы.) –

Смежные вопросы