选择器控件绑定到索引而不是标记
Picker control binds to index and not to tag
我遇到一个问题,我的 Picker 控件绑定到项目的索引,而不是标签中指定的值。我正在使用 WatchOS。
Picker("Hour:", selection: $hour) {
ForEach((twentyFourHour ? 0 : 1)..<(twentyFourHour ? 24 : 13)) {
Text(String(format: twentyFourHour ? "%02d" : "%d", [=10=]))
.tag([=10=])
}
}
当我
print("p: \(period) hr: \(hr) hour: \(hour)")
我明白了
p: am hr: 0 hour: 0
我已经通过向标签值添加任意值进行了测试,它似乎仍然绑定到索引。我也尝试过使用“{ i in ”语法得到相同的结果。
我基于 Apple 文档:
https://developer.apple.com/documentation/swiftui/picker?changes=latest_minor
问题是循环不认为原始类型是可识别的。因此,您需要将标识符显式定义为原始值:
Picker("Hour:", selection: $hour) {
ForEach((twentyFourHour ? 0 : 1)..<(twentyFourHour ? 24 : 13), id:\.self) {
Text(String(format: twentyFourHour ? "%02d" : "%d", [=10=]))
.tag([=10=])
}
}
关键的补充是:
id:\.self
我遇到一个问题,我的 Picker 控件绑定到项目的索引,而不是标签中指定的值。我正在使用 WatchOS。
Picker("Hour:", selection: $hour) {
ForEach((twentyFourHour ? 0 : 1)..<(twentyFourHour ? 24 : 13)) {
Text(String(format: twentyFourHour ? "%02d" : "%d", [=10=]))
.tag([=10=])
}
}
当我
print("p: \(period) hr: \(hr) hour: \(hour)")
我明白了
p: am hr: 0 hour: 0
我已经通过向标签值添加任意值进行了测试,它似乎仍然绑定到索引。我也尝试过使用“{ i in ”语法得到相同的结果。
我基于 Apple 文档: https://developer.apple.com/documentation/swiftui/picker?changes=latest_minor
问题是循环不认为原始类型是可识别的。因此,您需要将标识符显式定义为原始值:
Picker("Hour:", selection: $hour) {
ForEach((twentyFourHour ? 0 : 1)..<(twentyFourHour ? 24 : 13), id:\.self) {
Text(String(format: twentyFourHour ? "%02d" : "%d", [=10=]))
.tag([=10=])
}
}
关键的补充是:
id:\.self