问题描述
使用“用户默认值”时,我无法将滑块的值作为Int传递给字符串。 有人可以将UserDefault值转换为我的字符串吗?
以下对于基本变量(Preview)可以正常工作:
@State var Limit: Double = 8
var body: some View {
Form {
// Notification Limit
Section (header: Text("NOTIFICATION LIMIT")) {
HStack {
Slider(value: $Limit,in: 1...15,step: 1.0)
Text("\(Int(Limit))")
}
}
但是,当我使用UserDefault Values时,我收到以下错误:
初始化器'init(:)'要求'Binding
@Observedobject var settings = notificationSettings()
var body: some View {
Form {
// Notification Limit
Section (header: Text("NOTIFICATION LIMIT")) {
HStack {
Slider(value: $settings.globalLimit,step: 1.0)
Text("\(Int($settings.globalLimit))")
}
}
在文本字符串中仅将'$ settings.globalLimit'保留为两倍会产生以下错误: 实例方法'appendInterpolation'要求'Binding
这是当前用于“ globalSettingsView”的完整代码:
struct globalSettings: View {
@Observedobject var settings = notificationSettings()
var body: some View {
Form {
// On/Off Toggle
Toggle(isOn: $settings.globalOn) {
Text("Notifications On/Off")
}
// Notification Limit
Section (header: Text("NOTIFICATION LIMIT")) {
HStack {
Slider(value: $settings.globalLimit,step: 1.0)
Text("\(Int($settings.globalLimit))")
}
}
// Time Range
Section (header: Text("TIME RANGE")) {
DatePicker("Start Time",selection: $settings.startTime,displayedComponents: .hourAndMinute)
DatePicker("End Time",selection: $settings.endTime,displayedComponents: .hourAndMinute)
}
// Notification Limit
Section (header: Text("HELP")) {
NavigationLink(destination: howToUse()) {
Text("How To Use")
}
NavigationLink(destination: reportFeedback()) {
Text("Report Feedback")
}
Text("ratings & Review")
Text("Credits")
}
}
.navigationBarTitle("Settings")
}
还有保存userDefaults的'notificationSettings'类:
class notificationSettings: ObservableObject {
// Variable Declarations
@Published var globalOn: Bool {
didSet {
UserDefaults.standard.set(globalOn,forKey: "globalOn")
}
}
@Published var globalLimit: Double {
didSet {
UserDefaults.standard.set(globalLimit,forKey: "globalLimit")
}
}
@Published var startTime: Date {
didSet {
UserDefaults.standard.set(startTime,forKey: "startTime")
}
}
@Published var endTime: Date {
didSet {
UserDefaults.standard.set(endTime,forKey: "endTime")
}
}
// Intialization
init() {
self.globalOn = UserDefaults.standard.object(forKey: "globalOn") as? Bool ?? true
self.globalLimit = UserDefaults.standard.object(forKey: "globalLimit") as? Double ?? 8.0
self.startTime = UserDefaults.standard.object(forKey: "startTime") as? Date ?? Date()
self.endTime = UserDefaults.standard.object(forKey: "endTime") as? Date ?? Date()
}
解决方法
请不要在Text
中使用绑定($),它会显示值,而不是更改值
Slider(value: $settings.globalLimit,in: 1...15,step: 1.0)
Text("\(Int(settings.globalLimit))") // << here !!