gpt4 book ai didi

swift - 对 Swift [UI] 中的 UserDefaults 感到疯狂

转载 作者:行者123 更新时间:2023-12-03 20:25:52 24 4
gpt4 key购买 nike

开始使用 Swift 和 SwiftUI,我发现从 UIKit 迁移的过程非常困难。
目前被 UserDefaults 跺脚,即使在尝试理解我在网上找到的许多教程之后也是如此。

请告诉我我在这里做错了什么:
非常简单的代码:

  • 将 bool 值注册到 UserDefault,
  • 在文本中显示该 bool 值!

  • 没有比这更简单的了。
    但我无法让它工作,因为对 UserDefaults 的调用会抛出此错误消息:

    Instance method 'appendInterpolation' requires that 'Bool' conform to '_FormatSpecifiable'



    我的“应用程序”是默认的单 View 应用程序,有以下 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"))")
    }

    有任何想法吗 ?

    谢谢

    最佳答案

    您的问题是 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支持 bool ,然后您的原始代码应该可以工作:
    extension LocalizedStringKey.StringInterpolation {
    mutating func appendInterpolation(_ value: Bool) {
    appendInterpolation(String(value))
    }
    }

    关于swift - 对 Swift [UI] 中的 UserDefaults 感到疯狂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61270109/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com