【问题标题】:Updating a Scroll View with a global array使用全局数组更新滚动视图
【发布时间】:2020-11-26 13:17:22
【问题描述】:

在我的主屏幕上,我有一个滚动视图,我想显示应用内发生的所有事件。目前我已将其定义为全局变量,如下所示:

struct matchEvent: Identifiable{
    var id = UUID()
    
    var time: String
    var event: String
    var player: String
}

var matchEvents = [matchEvent]()

func addEvent(time: String, event: String, player: String){
    matchEvents.append(matchEvent(time: time, event: event, player: player))
}

函数addEvent() 是从应用程序周围其他类的不同方法内部调用的,因此我将其设为全局。当数组matchEvents 更新时,如何让应用程序更新滚动视图?我已经把我的 ScrollView 代码放在下面了。

struct eventList: View{
    var body: some View{
        ScrollView(.horizontal){
            HStack(matchEvents){
                ForEach(matchEvents){event in
                    Button(event.event){
                        print("Clicked")
                    }
                }
            }
        }
    }
}

任何帮助将不胜感激

【问题讨论】:

    标签: swift list swiftui state observableobject


    【解决方案1】:

    您可以将matchEvents 包装到类中并使用共享实例来更新/观察它。

    这是可能的方法。使用 Xcode 12.1 / iOS 14.1 测试

    注意:大写的类型要遵循约定

    struct MatchEvent: Identifiable{
        var id = UUID()
        
        var time: String
        var event: String
        var player: String
    }
    
    class EventsProcessor: ObservableObject {
        static let shared = EventsProcessor()
        
        @Published var matchEvents = [MatchEvent]()
        
        func addEvent(time: String, event: String, player: String){
            matchEvents.append(MatchEvent(time: time, event: event, player: player))
        }
    }
    
    struct EventListView: View{
        @ObservedObject var processor = EventsProcessor.shared
        
        var body: some View{
            ScrollView(.horizontal){
                HStack {
                    ForEach(processor.matchEvents){event in
                        Button(event.event){
                            print("Clicked")
                        }
                    }
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-03
      • 2016-01-20
      • 1970-01-01
      • 1970-01-01
      • 2018-12-16
      • 2018-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多