Мой словарь всегда нуль, хотел бы понять, почему это происходит. Мой код:Nil Swift Dictionary
var dic = [NSDate : MCACalendar]?()
dic?[currentDate!] = calendar
Мой словарь всегда нуль, хотел бы понять, почему это происходит. Мой код:Nil Swift Dictionary
var dic = [NSDate : MCACalendar]?()
dic?[currentDate!] = calendar
кажется [NSDate : MCACalendar]?()
терпит неудачу и возвращает nil
. Вы, вероятно, хотите использовать:
var dic = [NSDate : MCACalendar]?([:])
или
var dic: [NSDate : MCACalendar]? = [:]
@Kirsteins обеспечивает решение - но это хорошо, чтобы знать, почему.
Использование [NSDate : MCACalendar]?()
не работает, как вы ожидаете, потому что он создает экземпляр [NSDate : MCACalendar]?
, то есть экземпляр необязательного - быть более точным, экземпляр Optional<[NSDate : MCACalendar]>
. Так что инициализация не создает экземпляр [NSDate : MCACalendar]
.
Создание экземпляра факультативного (Optional<T>
) с помощью конструктора без параметров инициализирует его .None
(эквивалент nil
), так что, например, в:
var x = Int?() // `x` is initialized as `.None`
Если параметр передается в конструктор, то опционально переменная инициализируется .Some
:
var x = Int?(5) // x is initialized as `.Some(5)`
Это объясняет решение Кирштейнс НИКАКОГО. 1. Решение №. 2 настолько очевиден, что ему не нужны дополнительные объяснения :)
У меня ошибка: «Неустранимая ошибка: неожиданно найден nil при распаковке необязательного значения» –
В качестве ошибки указано, что вы развернули что-то, что «nil». Какая была линия, которая рушилась? – Kirsteins
строка: "tempDic? [CurrentDate!] = Calendar" –