В отличие от предыдущего, я был удивлен, увидев, что 'title' теперь является необязательным (компилятор теперь генерирует waning: интерполяция строк создает описание отладки для необязательного значения; вы хотели сделать это явным?).
Как получилось, что выражение «if let title =» больше не распаковывает его? Что мне делать, чтобы распаковать в if?
// Go thru all publication where the tag has been found
for item in items {
if let item = item as? [String: String?], let title = item["label"] {
i += 1
if let rawSummary = item["libSousTheme"] {
print("\(i)) Tag [\(foundTag)] z[\(foundZTag)] in « \(title) »")
}
else {
print("\(i)) Tag [\(foundTag)] z[\(foundZTag)] in « \(title) » (no summary!)")
}
}
}
title
должен был быть необязательным до Swift 3.1, так как вы выполняете приведение к[String: String?]
, а нижний индекс словаря используетnil
для обозначения отсутствия значения для ключа (так что вы получаете двойную обертку дляitem["label"]
). Как правило, вы никогда не захотите иметь словарь с необязательным типомValue
— просто используйте необязательный типValue
и используйтеnil
, чтобы указать отсутствие значения для ключа (т. е. вместо этого привести кas? [String: String]
). - person Hamish   schedule 02.03.2017let title = item["label"] as? String
, и оно будет работать так, как вы просите. - person creeperspeak   schedule 02.03.2017