In appDelegate didFinishLaunchingWithOptions
Я сохраняю значение в UserDefaults
следующим образом:
UserDefaults.standard.setValue("fr", forKey: "selectedLocale")
, и у меня есть один extension
из String
, где я получаю доступ к значению, которое ранее сохранялось в UserDefaults
, нотам я получил nil
.Когда я попытался отладить код, я узнал, что расширение работало до того, как func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
может кто-нибудь объяснить, почему это произошло?
Заранее спасибо
Мой код выглядит следующим образом:
Для приложенияДелегат:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
/*----------------- Setting Locale on App Launch ------------------*/
// UserDefaults.standard.setValue((UserDefaults.standard.value(forKey: "AppleLanguages") as! [Any])[0], forKey: USER_DEFAULT.selectedLocale)
let country = NSLocale.current
if let locale = country.collatorIdentifier {
if locale.contains("en") {
Singleton.sharedInstance.currentLocale = "en"
} else {
Singleton.sharedInstance.currentLocale = "fr"
}
} else {
Singleton.sharedInstance.currentLocale = "fr"
}
Singleton.sharedInstance.isRTL = false
UserDefaults.standard.setValue(Singleton.sharedInstance.currentLocale, forKey: USER_DEFAULT.selectedLocale)
}
И Для расширения:
extension String {
var localized: String {
let locale = UserDefaults.standard.value(forKey: USER_DEFAULT.selectedLocale) as? String
if let path = Bundle.main.path(forResource: locale, ofType: "lproj") {
let bundle = Bundle(path: path)
return NSLocalizedString(self, tableName: nil, bundle: bundle!, value: "", comment: "")
}
return self
}
}