SwiftUI报错:'language'仅在iOS 16及以上版本可用,求解决方案
解决‘language is only available in iOS 16 or newer’错误
这个错误是因为你使用的Locale.current.language是iOS 16及以上版本才新增的API,若你的项目部署目标低于iOS 16,就会触发该报错。以下是两种可行的解决方案:
方案1:直接改用兼容低版本的API
将Locale.current.language.languageCode?.identifier替换成iOS 16之前就存在的Locale.current.languageCode,修改后代码如下:
var selectedLanguage: String { get { return UserDefaults.standard.string(forKey: selectedLanguageKey) ?? Locale.current.languageCode ?? "en" // Default language is English } set { UserDefaults.standard.set(newValue, forKey: selectedLanguageKey) NotificationCenter.default.post(name: .languageDidChange, object: nil) } }
Locale.current.languageCode同样会返回当前系统的语言代码(如"zh"、"en"),和你原代码的效果一致,且支持所有iOS版本。
方案2:同时兼容新旧版本
如果你的项目需要覆盖iOS 16及以上和更低版本的设备,可以用条件编译做区分处理:
var selectedLanguage: String { get { let defaultLanguage: String if #available(iOS 16.0, *) { defaultLanguage = Locale.current.language.languageCode?.identifier ?? "en" } else { defaultLanguage = Locale.current.languageCode ?? "en" } return UserDefaults.standard.string(forKey: selectedLanguageKey) ?? defaultLanguage } set { UserDefaults.standard.set(newValue, forKey: selectedLanguageKey) NotificationCenter.default.post(name: .languageDidChange, object: nil) } }
内容的提问来源于stack exchange,提问作者Aray Moore
相关产品推荐
相关产品推荐

