swiftui无法更改接收器中的@State值



我现在正在学习swiftui,我是stackoverflow的新手,我发现了一个问题,这是我的代码。我想更改水槽中的@State nopubName,但它不起作用,打印总是"Nimar";,我不知道为什么

struct ContentView: View {

@State var nopubName: String = "Nimar"
private var cancellable: AnyCancellable?

var stringSubject = PassthroughSubject<String, Never>()
init() {
cancellable = stringSubject.sink(receiveValue: handleValue(_:))
}

func handleValue(_ value: String) {
print("handleValue: '(value)'")
self.nopubName = value
print("in sink "+nopubName)
}

var body: some View {
VStack {
Text(self.nopubName)
.font(.title).bold()
.foregroundColor(.red)
Spacer()

Button("sink"){
stringSubject.send("World")
print(nopubName)
}
}
}
}

您应该只从视图主体内部或从其调用的方法访问状态属性。

https://developer.apple.com/documentation/swiftui/state

您可以在ObservableObject中使用该功能,并更新@Published以保持UI更新

https://developer.apple.com/documentation/swiftui/managing-model-data-in-your-app

您不需要使用Combine,如果您在View中,您可以直接更改@State变量的值

struct ContentView: View {
@State var nopubName: String = "Nimar"
var body: some View {
VStack {
Text(self.nopubName)
.font(.title).bold()
.foregroundColor(.red)
Spacer()
Button("sink"){
nopubName = "World"
}
}
}
}

相关内容

  • 没有找到相关文章

最新更新