swift @Binding变量一次发布一个字符的String

oknwwptz  于 2023-03-07  发布在  Swift
关注(0)|答案(1)|浏览(78)

我有一个带有Binding的视图,如下所示:

struct MyView: View {
  @Binding var myString: String

  var body: some View {
    VStack {
       // Not important
    }
    .onReceive(myString.publisher) { receiveValue in
      print(receiveValue)
    }
  }
}

和父视图:

struct ParentView: View {
  @State var myString: String

  var body: some View {
    Button("Button") {
      myString = "Foo"
    }
    
    MyView(myString: myString)
  }
}

这里的想法是,每次绑定变量改变myString时,接收器都会触发并打印新字符串,这确实有效,但有趣的是,当点击按钮时,新字符串的每个字符都作为一个单独的事件发布:

F
o
o

如果我把绑定变量 Package 在ObservedObject中,这种情况就不会发生。我怎样才能让myString.publisher一次发布整个String?

ubby3x7f

ubby3x7f1#

请改用onChange(of:)

.onChange(of: myString) { value in
    print("onChange", value)
}

相关问题