@AppStorage 变量上的“调用初始化程序时没有完全匹配”错误?

Zor*_*gan 7 ios swift swiftui

我收到以下错误:No exact matches in call to initializer在我的@AppStorage 上下面的变量上:

模型.swift

class UserSettings: ObservableObject {
    @AppStorage("minAge") var minAge: Float = UserDefaults.standard.float(forKey: "minAge") 
Run Code Online (Sandbox Code Playgroud)

此变量旨在绑定到Slider下面的值。

设置.swift

import SwiftUI
struct Settings: View {
    let auth: UserAuth
    init(auth: UserAuth) {
        self.auth = auth
    }
    @State var minAge = UserSettings().minAge
    let settings = UserSettings()

    var body: some View {
            VStack {
                NavigationView {
                    Form {
                        Section {
                        Text("Min age")
                        Slider(value: $minAge, in: 18...99, step: 1, label: {Text("Label")})
                            .onReceive([self.minAge].publisher.first()) { (value) in
                                UserDefaults.standard.set(self.minAge, forKey: "minAge")
                            }
                        Text(String(Int(minAge)))
                        }
Run Code Online (Sandbox Code Playgroud)

知道问题是什么吗?

Fin*_*Fin 5

我还看到以下相同的错误:

@AppStorage ("FavouriteBouquets") var favouriteBouquets: [String] = []()
Run Code Online (Sandbox Code Playgroud)

AppStorage 可能不支持字符串数组。

编辑在这里找到了答案。


Asp*_*eri 4

您不需要中间状态 和UserDefaults,因为您可以直接绑定到AppStorage值,并且默认情况下使用UserDefaults.standard。您还需要使用与Slideris相同的类型Double

因此,这是一个最小的演示解决方案。使用 Xcode 12 进行测试。

struct Settings: View {
    @AppStorage("minAge") var minAge: Double = 18

    var body: some View {
        VStack {
            NavigationView {
                Form {
                    Section {
                        Text("Min age")
                        Slider(value: $minAge, in: 18...99, step: 1, label: {Text("Label")})
                        Text(String(Int(minAge)))
                    }
                }
            }
        }
    }
}

Run Code Online (Sandbox Code Playgroud)