Eso*_*wes 4 swift userdefaults swiftui
开始使用 Swift 和 SwiftUI,我发现从 UIKit 迁移的过程非常困难。目前被 UserDefaults 跺脚,即使在尝试理解我在网上找到的许多教程之后也是如此。
请告诉我我在这里做错了什么:非常简单的代码:
没有比这更简单的了。但我无法让它工作,因为对 UserDefaults 的调用会抛出此错误消息:
实例方法“appendInterpolation”要求“Bool”符合“_FormatSpecifiable”
我的“应用程序”是默认的单视图应用程序,有以下 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
}
Run Code Online (Sandbox Code Playgroud)
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"))")
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗 ?
谢谢
您的问题是Text(...)初始化程序采用 aLocalizedStringKey而不是 a String,它在其字符串插值中支持与普通字符串不同的类型(Bool显然不包括在内)。
有几种方法可以解决这个问题。
您可以使用Text带有 a的初始化程序String并逐字显示它,而无需尝试进行任何本地化:
var body: some View {
Text(verbatim: "The BOOL 1 value is : Bool 1 = \(defaults.bool(forKey: "MyBool 1"))")
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以扩展LocalizedStringKey.StringInterpolation以支持 bool,然后您的原始代码应该可以工作:
extension LocalizedStringKey.StringInterpolation {
mutating func appendInterpolation(_ value: Bool) {
appendInterpolation(String(value))
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1664 次 |
| 最近记录: |