gpt4 book ai didi

ios - 当发布的 View 模型成员值更改时,SwiftUI 在 View 上运行方法

转载 作者:行者123 更新时间:2023-11-28 20:50:20 28 4
gpt4 key购买 nike

我在对已发布的属性值更改运行 View 方法时遇到问题。我的 Playground 示例代码如下所示:

class MyFoo: ObservableObject {
@Published var bar: String
init(bar: String) {
self.bar = bar
}

func setNewText(newString: String) {
self.bar = newString
}

func runFunctions() {
setNewText(newString: "Test")
}
}

struct TestView: View {
@ObservedObject let foo = MyFoo(bar: "bar0")

init(){
let barSink = foo.$bar
.sink() { //THIS IS WHERE I GET ERROR "Escaping closure captures mutating 'self' parameter"
self.printResult(result: $0)
}
}

func printResult(result: String) {
print(result)
}
}

let a = TestView()

基本上我知道为什么我在关闭时会出现这个错误,但我不知道如何解决它。这是在已更改的 VM 发布属性值上运行 View 方法的正确方法吗?

我需要它,因为我使用的是未准备好 SwiftUI 的自定义微调器,所以我无法绑定(bind)到它,显示/隐藏它的唯一方法是调用它的方法。

任何帮助将不胜感激

最佳答案

我不知道 Playground 是如何运作的,但我试着回答你的问题。我在模拟器和真实设备上测试了代码:


class MyFoo: ObservableObject {
@Published var bar: String
init(bar: String) {
self.bar = bar
}

func setNewText(newString: String) {
self.bar = newString
}

func runFunctions() {
setNewText(newString: "Test")
}


}

struct TestView: View {
@ObservedObject var foo = MyFoo(bar: "bar0")

var body: some View {
Text("Lolz")
.onReceive(self.foo.$bar, perform: { lolz in
self.printResult(result: lolz)
})
}

func printResult(result: String) {
print(result)
}

}

struct ContentView: View {
var body: some View {
TestView()
}
}

@ObservedObject 需要是一个 var。使用 onRecieve(),您可以监听发布者并更新 UI 或调用函数。

希望对您有所帮助。

关于ios - 当发布的 View 模型成员值更改时,SwiftUI 在 View 上运行方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58977360/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com