当我在 SwiftUI 中使用 EnvironmentObject 时,选择器正在弹回

Posted

技术标签:

【中文标题】当我在 SwiftUI 中使用 EnvironmentObject 时,选择器正在弹回【英文标题】:Picker is springing back when I use an EnvironmentObject in SwiftUI 【发布时间】:2020-01-17 08:14:46 【问题描述】:

我创建了一个安静简单的 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,但它有同样的问题

【问题讨论】:

【参考方案1】:

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

@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()
    

【讨论】:

以上是关于当我在 SwiftUI 中使用 EnvironmentObject 时,选择器正在弹回的主要内容,如果未能解决你的问题,请参考以下文章

为啥当我在 UIHostingController 中使用 SwiftUI-transition 时,它不能按预期工作?

SwiftUI:响应 macOS 上的应用程序终止

SwiftUI - 当我在蓝牙中扫描设备时选择特定服务

SwiftUI:Gesture var 是不是可能移入 EnvironmentObject?

在 SwiftUI 中的 tabview 中嵌入 webview

SwiftUI 在 UIViewController 中调用委托