在我的主屏幕上,我有一个滚动视图,我想显示应用程序中发生的所有事件。目前,我将其定义为全局变量,如下所示:
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")
}
}
}
}
}
}