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



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

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封装到类中,并使用共享实例来更新/观察它。

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

最新更新