Как мне получить доступ к массиву, хранящемуся в словаре в 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, я смогу использовать ключ Dictionary, чтобы получить количество строк (временных интервалов) для определенного дня, который будет показан в tableView. Это был самый простой способ сделать это с помощью NOSql.

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

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

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

Буду признателен за любую помощь, оказанную.

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

2 ответа

Решение

Проблема возникает из-за использования интерполяции строк 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)")
    }
}

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

Мой ответ:

@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 и т. Д. (Так я думаю).

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

Другие вопросы по тегам