我收到以下错误: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)
知道问题是什么吗?
我还看到以下相同的错误:
@AppStorage ("FavouriteBouquets") var favouriteBouquets: [String] = []()
Run Code Online (Sandbox Code Playgroud)
AppStorage 可能不支持字符串数组。
编辑在这里找到了答案。
您不需要中间状态 和UserDefaults
,因为您可以直接绑定到AppStorage
值,并且默认情况下使用UserDefaults.standard
。您还需要使用与Slider
is相同的类型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)
归档时间: |
|
查看次数: |
5271 次 |
最近记录: |