Вы получаете cra * sh, потому что вы извлекаете значение nil
из UserDefaults или потому, что есть что-то, что не является [String]
или не может быть типизировано в [String]
.
В этом фрагменте кода:
data = defaults.object(forKey: "savedData") as! [String]
Вы извлекаете объект Any?
.
То есть объект Optional
, который может содержать или не содержать значение.
Кроме того, это объект, который может быть практически любым классом.
И тогда вы вынуждаете в [String]
, что, очевидно, приведет к sh, если это не [String]
объект.
Вы должны заменить эту строку кода следующим образом:
data = defaults.object(forKey: "savedData") as? [String]
Таким образом, вы безопасно развернете извлеченный объект и попробуйте ввести его в [String]
. Если произойдет сбой, ваш data
будет nil
вместо сбоя приложения.
Вы также можете указать значение по умолчанию в случае сбоя при типизации, например:
data = defaults.object(forKey: "savedData") as? [String] ?? []
Если При неудачной трансляции вы получите пустой массив [String]
.
TL; DR : я бы посоветовал вам изучить Optionals
и узнать, как с ними работать.