2014-12-18 2 views
2

Мой словарь всегда нуль, хотел бы понять, почему это происходит. Мой код:Nil Swift Dictionary

var dic = [NSDate : MCACalendar]?() 
dic?[currentDate!] = calendar 

ответ

1

кажется [NSDate : MCACalendar]?() терпит неудачу и возвращает nil. Вы, вероятно, хотите использовать:

var dic = [NSDate : MCACalendar]?([:]) 

или

var dic: [NSDate : MCACalendar]? = [:] 
+0

У меня ошибка: «Неустранимая ошибка: неожиданно найден nil при распаковке необязательного значения» –

+0

В качестве ошибки указано, что вы развернули что-то, что «nil». Какая была линия, которая рушилась? – Kirsteins

+0

строка: "tempDic? [CurrentDate!] = Calendar" –

3

@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 настолько очевиден, что ему не нужны дополнительные объяснения :)