使用全局数组更新滚动视图
Posted
技术标签:
【中文标题】使用全局数组更新滚动视图【英文标题】:Updating a Scroll View with a global array 【发布时间】:2020-11-26 13:17:22 【问题描述】:在我的主屏幕上,我有一个滚动视图,我想显示应用内发生的所有事件。目前我已将其定义为全局变量,如下所示:
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")
任何帮助将不胜感激
【问题讨论】:
【参考方案1】:您可以将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")
【讨论】:
以上是关于使用全局数组更新滚动视图的主要内容,如果未能解决你的问题,请参考以下文章
在滚动视图中更改 UIView 而 / 更新滚动视图高度 - Swift 3 / Xcode 8
如何在选择新数组被播放到该滚动视图时,如何删除将放置到滚动视图中的UIBUtonons?