当我开始接触 Swift 和 SwiftUI 时,我发现从 UIKit 迁移的过程非常困难。
即使在尝试理解我在网上找到的许多教程之后,目前仍被 UserDefaults 所困扰。
请告诉我我在这里做错了什么:
非常简单的代码:
- 将 bool 值注册到 UserDefault,
- 在文本中显示该布尔值!
没有比这更简单的了。
但我无法让它工作,因为对 UserDefaults 的调用会抛出此错误消息:
实例方法“appendInterpolation”要求“Bool”符合“_FormatSpecifying”
我的“应用程序”是默认的单视图应用程序,有以下 2 个更改:
1-在 AppDelegate 中,我注册了我的 bool :
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
UserDefaults.standard.register(defaults: [
"MyBool 1": true
])
return true
}
2-在 ContentView 中,我尝试显示它(在 struct ContentView: View 内部):
let defaults = UserDefaults.standard
var body: some View {
Text("The BOOL 1 value is : Bool 1 = \(defaults.bool(forKey: "MyBool 1"))")
}
有任何想法吗 ?
Thanks
你的问题是Text(...)
初始化器需要一个LocalizedStringKey
而不是一个String
它在字符串插值中支持与普通字符串不同的类型(不包括Bool
显然)。
有几种方法可以解决这个问题。
你可以使用Text
初始化器需要一个String
并且只是逐字显示它而不尝试进行任何本地化:
var body: some View {
Text(verbatim: "The BOOL 1 value is : Bool 1 = \(defaults.bool(forKey: "MyBool 1"))")
}
或者,您可以扩展LocalizedStringKey.StringInterpolation
支持布尔值,然后你的原始代码应该可以工作:
extension LocalizedStringKey.StringInterpolation {
mutating func appendInterpolation(_ value: Bool) {
appendInterpolation(String(value))
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)