как следует из названия, я пытаюсь передать данные из одного дочернего представления (A) в другое дочернее представление (B) через родительское представление (P).
Родительское представление выглядит так:
@State var rectFrame: CGRect = .zero
var body: some View {
childViewA(rectFrame: $rectFrame)
childViewB()
}
где childViewA
получает CGRect
, который нужен childViewB
.
childViewA
выглядит так:
@Binding var rectFrame: CGRect
var body: some View {
// Very long code where rectFrame is obtained and printed to console correctly
}
Как передать rectFrame
childViewB
? Все, что я пробовал до сих пор, возвращает CGRect.zero
в childViewB
, несмотря на то, что печатаются правильные значения как в parentView
, так и в childViewA
.
Чтобы попытаться передать значение childViewB
, я переписал parentView
следующим образом:
@State var rectFrame: CGRect = .zero
var body: some View {
childViewA(rectFrame: $rectFrame)
childViewB(rectFrame: $rectFrame.value)
}
при этом childViewB
имеет следующую структуру:
var rectFrame: CGRect = CGRect.zero
var body: some View {
}
Но это просто печатает CGRect.zero
каждый раз.
Я недавно пробовал @ObjectBinding
, но я боролся с этим, поэтому, если кто-нибудь может помочь мне с этим конкретным примером, я был бы очень благодарен.
class SourceRectBindings: BindableObject {
let willChange = PassthroughSubject<Void, Never>()
var sourceRect: CGRect = .zero {
willSet {
willChange.send()
}
}
}
.background(GeometryBinder(rect: self.$childFrame))
. - person arsenius   schedule 22.07.2019childViewB(rectFrame: $rectFrame.value)
. Почему не простоself.rectFrame
? - person arsenius   schedule 22.07.2019