标签在 SwiftUI 中的作用是什么?

lgm*_*905 3 swiftui

我对标签的作用感到困惑。当我删除标签时,我只能选择“M”,然后添加,我可以选择所有选项。

当我制作整数数组选择器时,标签的存在根本无关紧要。

但问题发生在字符串数组中。我想知道为什么会发生这种情况。

import SwiftUI

struct InitGender: View {
    @ObservedObject var initData : InitData
    @ObservedObject var initViewRouter : InitViewRouter
    let genderRange = ["M","F"]
    
    var body: some View {
        VStack {
            Text("Select your gender")
                .font(.title)
                .bold()
            
            Picker("Select gender", selection : $initData.gender) {
                ForEach(0..<genderRange.count) {
                    Text(self.genderRange[$0]).tag(self.genderRange[$0])
                }
            }
            .labelsHidden()
            .clipped()
        }
    }    
}
Run Code Online (Sandbox Code Playgroud)

Asp*_*eri 6

SwiftUIPicker通过tag或检测选择id,因为这种类型的选择和tag(或id)必须相同。

这是一个演示(使用 Xcode 12 / iOS 14 测试)

struct InitGender: View {
    @State private var selection: String = "M"
    let genderRange = ["M","F"]

    var body: some View {
        VStack {
            Text("Select your gender")
                .font(.title)
                .bold()
            Text("Selected: \(selection)")

            Picker("Select gender", selection : $selection) {
                ForEach(0..<genderRange.count) {
                    Text(self.genderRange[$0]).tag(self.genderRange[$0])
                }
            }
            .labelsHidden()
            .clipped()
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

的替代工作变体 Picker

Picker("Select gender", selection : $selection) {
    ForEach(genderRange, id: \.self) {
        Text($0)
    }
}
Run Code Online (Sandbox Code Playgroud)