首页 > 解决方案 > 当我在 SwiftUI 中使用 EnvironmentObject 时,选择器正在弹回

问题描述

我创建了一个安静的简单 Picker 并希望使用 EnvironmentObject 作为数据源,但是当我使用它时,Picker 总是弹回默认值。

class HobbiesOfUser: ObservableObject {
@Published var hobbies = ["Swimming", "Football", "Hockey", "Rugby", "Other"]}

struct ContentView: View {

    @EnvironmentObject var hobbiesOfUser: HobbiesOfUser
//   @State var hobbiesOfUser = ["Swimming", "Football", "Hockey", "Rugby", "Other"]

    var body: some View {
                            Picker(selection: $hobbiesOfUser.hobbies, label: Text("")) {
                            ForEach(0 ..< hobbiesOfUser.hobbies.count) {
                                Text(self.hobbiesOfUser.hobbies[$0]).tag($0)
                            }.labelsHidden()
        }
    }
}

我试图选择另一种形式的 Picker,但它有同样的问题

标签: environment-variablesswiftuipicker

解决方案


选择应该是数组的一项,而不是完整的数组,如下所示

@EnvironmentObject var hobbiesOfUser: HobbiesOfUser

@State private var selected = "Swimming"
var body: some View {
        Picker(selection: $selected, label: Text("")) {
        ForEach(0 ..< hobbiesOfUser.hobbies.count) {
            Text(self.hobbiesOfUser.hobbies[$0]).tag($0)
        }.labelsHidden()
    }
}

推荐阅读