我在发布属性值更改时无法运行视图方法。我的游乐场示例代码如下所示:
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发布的属性值上运行视图方法的正确方法?
我需要这个,因为我正在使用尚未准备好SwiftUI的自定义微调器,因此我无法绑定到它,并且显示/隐藏它的唯一方法是调用其方法。
任何帮助将不胜感激
我不知道操场如何运作,但我想回答你的问题。我在模拟器和真实设备上测试了代码:
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或调用函数。
我希望这会有所帮助。