Какова роль тега в SwiftUI?

#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.