我可以对多个View元素使用@State吗? [SwiftUI]

时间:2020-03-23 10:58:02

标签: swiftui state

比方说,我有一个Component()列表,我希望能够分别拖动它们。所以我宣布了一个

@State var cardPosition = CGSize.zero

并作为我的Component()的修饰符:

.offset(x: self.cardPosition.width, y: self.cardPosition.height) .gesture(DragGesture().onChanged { 
value in self.cardPosition = value.translation }

我遇到的问题是,如果我在所有Component()上复制此修饰符,则如果拖动其中之一,则将它们全部拖动... 如何更改我拖动的唯一卡片的位置,而不必为每个卡片创建单个@State?

谢谢!

1 个答案:

答案 0 :(得分:0)

我最近使用字典管理多个视图的状态,但我不知道实现这一目标的“最佳实践”方法。不过,它可能会涉及使用某种集合,所以这应该是一个好的开始。

let cur = jQuery(this).closest('.step');
let next = cur.next();
       
next.find(".header").show();

然后在我的 init 中,我从与视图相关的日期创建字典,并使用它来为 State 集合提供其初始值

@State var showDetails: [Date: Bool] = [:]

然后我使用集合在适当的视图上切换状态

let detailDays = Dictionary(uniqueKeysWithValues:
                                days.map { ($0, false) })
    
self._showDetails = State<[Date: Bool]>(initialValue: detailDays)
MyView()
.simultaneousGesture(TapGesture().onEnded {
    showDetails[date]!.toggle()
})