Словарь 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
это строка?. Когда вы не говорите компилятору, что вы хотите, он выбирает что-то относительно безопасное. Только когда вы явно указываете, он проверяет, может ли работать указанное преобразование.