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