Когда ключ отсутствует, вы пытаетесь принудительно привести пустое Any?
к Int?
, и, таким образом, условие if не выполняется:
if let defaultTimeDiffSeconds: Int = userDefaults.value(forKey: "timeDiffSecondsDefault") as! Int? {
timeDiffSeconds = defaultTimeDiffSeconds
}
И if timeDiffSeconds
не был инициализирован в другом месте, это вызовет сбой при попытке его использовать.
Подходящим способом будет условное приведение с as?
:
if let defaultTimeDiffSeconds = userDefaults.object(forKey: "timeDiffSecondsDefault") as? Int { ... }
object(forKey:)
любезно предложил Мистер Леонардо .
Использование userDefaults.integer(forKey: "timeDiffSecondsDefault")
может привести к путанице при использовании timeDiffSeconds
позже, поскольку integer(forKey:)
вернет 0
, если ключ отсутствуетв пользовательских значениях по умолчанию и возвращает целое число, даже если значение является строкой или логическим значением.