У вас есть беспорядок, потому что словарь, значения которого могут быть nil
, представляет вам перспективу с двумя обернутыми опциями , и поэтому два вида nil
, Вы получаете nil
, если ключ отсутствует, а затем nil
, который вы получаете, если ключ не отсутствует, и вы разворачиваете извлеченный результат. И, к сожалению, вы тестируете на детской площадке, которая является плохим местом для изучения различия.
Чтобы понять, что я имею в виду, рассмотрим только следующее:
var d : [String:Int?] = ["Matt":1]
let val = d["Matt"]
Что является типом val
? Это Int??
- Int, завернутый в опцию, завернутый в другой Необязательный. Это потому, что значение внутри словаря было, по определению, Int, завернутым в Необязательный, а затем извлечение значения его ключами, что в другое Необязательно.
Итак, давайте немного поработаем и сделаем так:
var d : [String:Int?] = ["Matt":nil]
let val = d["Matt"]
Что такое val
? Ну, детская площадка может сказать , что это nil
, но правда более сложна; это nil
, завернутый в другой Необязательный . Это проще всего увидеть, если вы печатаете val
, и в этом случае вы получаете, а не nil
, но "Optional(nil)"
.
Но если мы попробуем что-нибудь, ключ отсутствует, мы получаем другой ответ :
let val2 = d["Alex"]
Это действительно - nil
, означающее, что ключ отсутствует. И если мы печатаем val2
, получаем "nil"
. Игровая площадка не делает различия (она говорит nil
как для val
, так и val2
), но преобразование в String (что делает print
) показывает разницу.
So часть проблемы - это вся эта двойная упаковка, а другая часть состоит в том, что игровая площадка представляет собой двойную обертку Необязательно очень вводящим в заблуждение способом.
MORAL 1: Словарь, тип значения которого является Необязательно может оказаться очень сложным.
MORAL 2: Игровые площадки - это работа дьявола. Избежать их. Используйте реальное приложение и используйте ведение журнала на консоли или панель переменных отладчика, чтобы узнать, что происходит на самом деле.
Используйте исполнитель Mojo Знатока Don Brown известности Atlassian для выполнения любого другого произвольного плагина.
Исполнитель Mojo позволяет для выполнения других Заклинаний (плагины) в Знатоке 2 плагина, позволяя Вам легко создать Знатока 2 плагина, которые состоят из других плагинов.