Ошибка «Нет точных совпадений при вызове инициализатора» в переменной @AppStorage? - PullRequest
3 голосов
/ 09 июля 2020

Я получаю следующую ошибку: No exact matches in call to initializer на моем @ AppStorage переменная ниже:

Model.swift

class UserSettings: ObservableObject {
    @AppStorage("minAge") var minAge: Float = UserDefaults.standard.float(forKey: "minAge") 

Эта переменная предназначена для привязки к значению Slider ниже.

Settings.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)))
                        }

Есть идеи, в чем проблема?

Ответы [ 2 ]

3 голосов
/ 09 июля 2020

Вам не нужно промежуточное состояние и UserDefaults, потому что вы можете напрямую привязать значение AppStorage, и оно по умолчанию использует UserDefaults.standard. Также вам нужно использовать те же типы с Slider, что равно 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)))
                    }
                }
            }
        }
    }
}

0 голосов
/ 22 июля 2020

Я также вижу ту же ошибку со следующим:

@AppStorage ("FavouriteBouquets") var favouriteBouquets: [String] = []()

Возможно, массив строк не поддерживается AppStorage.

Изменить Нашел ответьте здесь .

...