1

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

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

任何帮助,将不胜感激

4

1 回答 1

2

您可以包装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")
                    }
                }
            }
        }
    }
}
于 2020-11-26T13:32:17.473 回答