[SwiftUI] Picker 내의 ForEach에서 id:\.self 했을 때의 버그

6330 단어 SwiftSwiftUI
selection 가 index 의 값이 되어 버립니다.


struct MyView: View {
    @State var selection = 10
    let items = [10,20,30]

    var body: some View {
        VStack {
            Text("selection: \(selection)")
            Picker(selection: $selection, label: Text("")) {
                ForEach(0..<items.count, id: \.self) { index in
                    Text("\(items[index])")
                        .tag(items[index])
                }
            }
        }
    }
}

아래와 같이 Identifiable 뭔가를 ForEach 하면 고쳤습니다.


struct MyView: View {
    @State var selection = 10

    struct Item: Identifiable {
        var id = UUID()
        var num:Int
        init(_ num: Int) { self.num = num }
    }
    let items = [Item(10), Item(20), Item(30)]

    var body: some View {
        VStack {
            Text("selection: \(selection)")
            Picker(selection: $selection, label: Text("")) {
                ForEach(items) { item in
                    Text("\(item.num)")
                        .tag(item.num)
                }
            }
        }
    }
}

버전
Swift 5.4

좋은 웹페이지 즐겨찾기