swift 5,iOS 13
我想使用 passthroughSubject 发布者;但我的直觉告诉我它是一个全局变量,因此非常糟糕的做法。如何使这个全局变量不那么全局,同时仍然可用。这是一些代码来显示我在说什么。
我知道有很多其他方法可以做到这一点,但我想创建一些简单的代码来说明这个问题。
import SwiftUI
import Combine
let switcher = PassthroughSubject<Void,Never>()
struct SwiftUIViewF: View {
@State var nextPage = false
var body: some View {
VStack {
Text("Switcher")
.onReceive(switcher) { (_) in
self.nextPage.toggle()
}
if nextPage {
Page1ViewF()
} else {
Page2ViewF()
}
}
}
}
struct Page1ViewF: View {
var body: some View {
Text("Page 1")
.onTapGesture {
switcher.send()
}
}
}
struct Page2ViewF: View {
var body: some View {
Text("Page 2")
.onTapGesture {
switcher.send()
}
}
}
struct SwiftUIViewF_Previews: PreviewProvider {
static var previews: some View {
SwiftUIViewF()
}
}
最佳答案
这是可能的解决方案 - 将其保存在父 View 中并注入(inject) subview :
struct SwiftUIViewF: View {
let switcher = PassthroughSubject<Void,Never>()
@State var nextPage = false
var body: some View {
VStack {
Text("Switcher")
.onReceive(switcher) { (_) in
self.nextPage.toggle()
}
if nextPage {
Page1ViewF(switcher: switcher)
} else {
Page2ViewF(switcher: switcher)
}
}
}
}
struct Page1ViewF: View {
let switcher: PassthroughSubject<Void,Never>
var body: some View {
Text("Page 1")
.onTapGesture {
self.switcher.send()
}
}
}
struct Page2ViewF: View {
let switcher: PassthroughSubject<Void,Never>
var body: some View {
Text("Page 2")
.onTapGesture {
self.switcher.send()
}
}
}
关于ios - 使组合直通发布者不那么全局化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62756051/