发布的视图模型成员值更改时视图上的 SwiftUI 运行 方法
SwiftUI run method on view when Published view model member value changes
我在使用 运行 已发布 属性 值更改的查看方法时遇到问题。我的游乐场示例代码如下所示:
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: [=11=])
}
}
func printResult(result: String) {
print(result)
}
}
let a = TestView()
基本上我知道为什么我在关闭时会出现这个错误,但我不知道如何解决它。对于 运行 VM 上发布的 属性 值更改的查看方法,这是正确的方法吗?
我需要这个,因为我使用的自定义微调器还没有准备好 SwiftUI,所以我无法绑定到它,show/hide 的唯一方法是调用它的方法。
任何帮助将不胜感激
我不知道游乐场是如何运作的,但我试着回答你的问题。我在模拟器和真实设备上测试了代码:
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 或调用函数。
希望对您有所帮助。
我在使用 运行 已发布 属性 值更改的查看方法时遇到问题。我的游乐场示例代码如下所示:
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: [=11=])
}
}
func printResult(result: String) {
print(result)
}
}
let a = TestView()
基本上我知道为什么我在关闭时会出现这个错误,但我不知道如何解决它。对于 运行 VM 上发布的 属性 值更改的查看方法,这是正确的方法吗?
我需要这个,因为我使用的自定义微调器还没有准备好 SwiftUI,所以我无法绑定到它,show/hide 的唯一方法是调用它的方法。
任何帮助将不胜感激
我不知道游乐场是如何运作的,但我试着回答你的问题。我在模拟器和真实设备上测试了代码:
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 或调用函数。
希望对您有所帮助。