2014-09-16 2 views
0

Это, как я создал свой словарь с массивом:Как получить доступ к массиву, хранящемуся в словаре в Swift?

@IBAction func didTapSaveButton(sender: UIButton) { 
    var hooObject = Dictionary<String, [String]>() 
    hooObject["\(dayLabel.text)"] = ["\(fromTimeLabel.text) - \(toTimeLabel.text)", "\(costField.text)"] 
    NSLog("RESULT: \(hooObject)") 
} 

NSLog результат:

RESULT: [Optional("Wednesday"): [Optional("9:00 PM") - Optional("3:00 PM"), 40.00]] 

Я попытался это:

@IBAction func didTapSaveButton(sender: UIButton) { 
    var hooObject = Dictionary<String, [String]>() 
    hooObject["\(dayLabel.text)"] = ["\(fromTimeLabel.text) - \(toTimeLabel.text)", "\(costField.text)"] 
    var res = hooObject["Wednesday"] 
    NSLog("RESULT: \(res)") 

}

Это возвращает ноль, который для меня не имеет смысла. Среда - это сохраненный ключ, поэтому я бы подумал, что этого будет достаточно, чтобы вернуть массив.

То, что я пытаюсь сделать:

В основном у меня есть таблица с 7 разделов и каждый представляет день. В каждый день я храню временные интервалы со стоимостью для бронирования активности в этом слоте.

Когда я использую numberOfRowsInSection, я смогу использовать ключ словаря, чтобы получить количество строк (временных интервалов) для определенного дня, который будет отображаться в таблицеView. Это был самый простой способ сделать это с помощью NOSql.

Я храню словари в столбце на parse.com и получаю доступ к этому словарю в своем табличном представлении.

В любом случае я не понимаю, почему я не могу получить доступ к массиву с помощью ключа. Я мог легко пойти и использовать NSMutableDictionary, но я использую Swift для всех моих проектов в качестве учебного опыта.

Удивление, если было бы лучше использовать словарь со словарями, например. ["fromTime": значение, "toTime": значение, "стоимость": значение]

Поблагодарите за предоставленную помощь.

Спасибо за ваше время.

+1

Трудно сказать, не видя полного класса, но похоже, что вы заполняете словарь 'hooObject' внутри вашего обработчика событий. Если это так, оно исчезнет в конце этого метода, поэтому доступ к данным позже будет невозможным. Вы хотите, чтобы это было свойством экземпляра вашего класса. –

+0

Yep просто вручную ввел строки в словаре вместо того, чтобы захватывать текст с метки и текстового поля, а когда я вызываю hooObject ["Среда"], он показывает мне массив. Попробуй свое предложение. – LondonGuy

+0

@NateCook Я сделал hooObject экземпляром var, но без разницы. Текст в тексте ярлыка и тексте поля по-прежнему сохраняется после нажатия кнопки «Сохранить», и я не увольняю представление или что-то еще, поэтому я мог бы получить к ним доступ. Не имеет смысла для меня. Я думаю, что неправильно понял, что вы сказали, может быть. – LondonGuy

ответ

1

Проблема возникает с помощью интерполяции строк на dayLabel.text - так как это String?, а не String, вы в конечном итоге с «Дополнительно (среда)» в качестве ключа, а не только «Среда». Вам нужно разворачивать его, как это:

@IBAction func didTapSaveButton(sender: UIButton) { 
    var hooObject = Dictionary<String, [String]>() 
    if let day = dayLabel.text { 
     hooObject["\(day)"] = ["\(fromTimeLabel.text) - \(toTimeLabel.text)", "\(costField.text)"] 
     NSLog("RESULT: \(hooObject)") 
    } 
} 

Вы, вероятно, нужно сделать что-то подобное с от и до поля времени, чтобы получить нужные значения.

+0

Выяснил это сейчас. Я действительно не понимаю, почему я могу уйти от этого, не делая этого на других моих лейблах. – LondonGuy

0

Мой ответ:

@IBAction func didTapSaveButton(sender: UIButton) { 
    var hooObject = Dictionary<String, [String]>() 
    hooObject["\(dayLabel.text!)"] = ["\(fromTimeLabel.text) - \(toTimeLabel.text)", "\(costField.text)"] 
    var res = hooObject["Wednesday"] 
    NSLog("RESULT: \(res)") 
} 

мне пришлось изменить dayLabel.text к dayLabel.text!

Эти восклицательные знаки действительно меня дезориентируют. Сначала я думал, что они похожи на указатели, потому что они не могут использоваться в Int, Float и т. Д. (Так я думаю).

Но факт, что мне нужен один в конце дняLabel.text, а не мои другие ярлыки, еще больше меня озадачивает. Думаю, вовремя у меня будет мой ах-ха-ха. Я прочитал несколько сообщений здесь, но все еще не совсем понял.

+0

Yikes, не делайте этого - если dayLabel.text не установлен, ваше приложение рухнет на месте. –

+0

Прежде чем отправлять свои формы, я всегда делаю валидацию. – LondonGuy

+0

Опасно использовать '!' Для решения проблемы компилятора, о которой вы не уверены, - вы торгуете проблемой компилятора для проблемы времени выполнения, стирая большую функцию безопасности Swift. Прочитайте [этот раздел о опциях] (https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-XID_483) чтобы лучше понять, что происходит. –

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