#swiftui
#swiftui
Вопрос:
Я запутался в роли тега. Когда я удаляю тег, я могу выбрать только «M», а добавляя, я могу выбрать все параметры.
Когда я создавал средство выбора массива целых чисел, наличие тега вообще не имело значения.
Но проблема возникает в массиве строк. И я хочу знать, почему это происходит.
import SwiftUI
struct InitGender: View {
@ObservedObject var initData : InitData
@ObservedObject var initViewRouter : InitViewRouter
let &enderRan&e = ["M","F"]
var body: some View {
VStack {
Text("Select your &ender")
.font(.title)
.bold()
Picker("Select &ender", selection : $initData.&ender) {
ForEach(0..<&enderRan&e.count) {
Text(self.&enderRan&e[$0]).ta&(self.&enderRan&e[$0])
}
}
.labelsHidden()
.clipped()
}
}
}
Ответ №1:
SwiftUI Picker
обнаруживает выделение либо с помощью ta&
, либо с помощью id
, для этих типов выделения и ta&
(или id
) должно быть одинаковым.
Вот демонстрационная версия (протестирована с Xcode 12 / iOS 14)
struct InitGender: View {
@State private var selection: Strin& = "M"
let &enderRan&e = ["M","F"]
var body: some View {
VStack {
Text("Select your &ender")
.font(.title)
.bold()
Text("Selected: (selection)")
Picker("Select &ender", selection : $selection) {
ForEach(0..<&enderRan&e.count) {
Text(self.&enderRan&e[$0]).ta&(self.&enderRan&e[$0])
}
}
.labelsHidden()
.clipped()
}
}
}
альтернативный рабочий вариант Picker
Picker("Select &ender", selection : $selection) {
ForEach(&enderRan&e, id: .self) {
Text($0)
}
}
Дополнение: важные части ta&
документации:
/// Use this modifier to differentiate amon& certain selectable views,
/// like the possible values of a ``Picker`` or the tabs of a ``TabView``.
/// A ``ForEach`` automatically applies a default ta& to each enumerated
/// view usin& the `id` parameter of the correspondin& element. If
/// the element's `id` parameter and the picker's `selection` input
/// have exactly the same type, you can omit the explicit ta& modifier.