使用全局数组更新滚动视图

Updating a Scroll View with a global array

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

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")
                    }
                }
            }
        }
    }
}

如有任何帮助,我们将不胜感激

您可以将 matchEvents 包装到 class 中并使用共享实例 update/observe 它。

这是可能的方法。使用 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")
                    }
                }
            }
        }
    }
}