Вместо того, чтобы пытаться сохранить ссылку на подпредставление, почему бы не сделать связь между ними? В вашем примере это может быть связано с привязкой к количеству.
struct ContainerView: View {
@State private var count = 0
var body: some View {
// Your Button wrapping the ContentView
ContentView(count: $count)
}
func reset() {
self.count = 0
}
}
struct ContentView: View {
@Binding var count: Int
// ContentView's body
}
Когда ContainerView
сбрасывает счет, привязка обновит дочерний элемент.
РЕДАКТИРОВАТЬ: я вижу ваши комментарии о желании ContentView
управлять сбросом c. Как насчет попытки воспроизвести некоторые функциональные возможности, такие как NavigationLink
, где задается isActive:
bool, а затем сбрасывается системой навигации?
В вашем случае вы можете попробовать следующее:
struct ContainerView: View {
@State private var shouldReset: Bool = false
var body: some View {
// Your Button wrapping the ContentView
ContentView(shouldReset: $shouldReset)
}
func reset() {
self.shouldReset = true
}
}
struct ContentView: View {
@Binding var shouldReset: Bool {
didSet {
if shouldReset {
// Call your reset logic here
}
shouldReset = false
}
}
// ContentView's body
}
Ваш ContentView
будет знать об этом изменении, мы увидим его как отдельное "состояние", а затем это состояние будет сброшено после завершения действия.
Вероятно, это не идеальное решение, но мне кажется, что оно повторяет шаблон, показанный некоторыми компонентами SwiftUI первой стороны.