我可以使用以下选择器选择事件应多久发生一次:
struct RecurrenceSelector: View {
@State var interval = 1
var body: some View {
NavigationView {
Form {
Section {
Picker("Every", selection: $interval) {
Text("1 week").tag(1)
ForEach(2 ..< 1000) { weeks in
Text("\(weeks) weeks")
.tag(weeks)
}
}.pickerStyle(WheelPickerStyle())
}
}
}
.onDisappear(perform: updateRruleString)
}
private func updateRruleString() {
print("INTERVAL: \(self.interval)")
}
}
Run Code Online (Sandbox Code Playgroud)
关闭视图时,如果将“选择器”设置为5周,则将打印INTERVAL:3。如果将其设置为20周,则将打印INTERVAL:18。
我不知道为什么值要减去2。
替换ForEach(2 ..< 1000)为ForEach(2 ..< 1000, id: \.self)
ForEach有几个初始化程序。您正在使用
init(_ data: Range<Int>, @ViewBuilder content: @escaping (Int) -> Content)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,选择interval对应于您选择的索引;由于您的范围从2开始,索引从0开始,因此您的选择interval将始终偏离2。
如果您将初始化程序与id参数一起使用,
init(_ data: Data, id: KeyPath<Data.Element, ID>, content: @escaping (Data.Element) -> Content)
Run Code Online (Sandbox Code Playgroud)
那么您的选择对应于element而不是索引。因此,您的interval属性将对应于显示的值。
| 归档时间: |
|
| 查看次数: |
51 次 |
| 最近记录: |