Словарь Swift с присвоенным значением nil может быть условно привязан к оператору if let

Вы можете объяснить этот код Swift

Если я назначу значение nil для ключа "a", а затем использую оператор if let, это значение nil будет развернуто как nil и может быть напечатано

      import Foundation
var dictionary = ["a": nil, "b": "Costam", "c": nil]
dictionary.updateValue(nil, forKey: "a")

if let value = dictionary["b"] { 
   print("Some value: ", value)
}

print(dictionary.keys)

И чтобы предотвратить такое поведение, мне нужно добавить приведение типов к String?

      import Foundation
var dictionary = ["a": nil, "b": "Costam", "c": nil]
dictionary.updateValue(nil, forKey: "a")

if let value = dictionary["b"] as? String { 
   print("Some value: ", value)
}

print(dictionary.keys)

1 ответ

Если я помещу ваш первый фрагмент на игровую площадку, я увижу предупреждение: «Выражение неявно приведено к строке»? любому'". Таким образом, ничего не разворачивается автоматически, и, фактически, если я избавлюсь от предупреждения, принудительно развернув его, произойдет сбой (как и ожидалось).

Ваш тип данных словаря [String:String?] и valueэто строка?. Когда вы не говорите компилятору, что вы хотите, он выбирает что-то относительно безопасное. Только когда вы явно указываете, он проверяет, может ли работать указанное преобразование.

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