gpt4 book ai didi

binding - SwiftUI 和 Combine Published 和 Binding 有什么区别

转载 作者:行者123 更新时间:2023-12-05 07:16:34 27 4
gpt4 key购买 nike

我知道在什么情况下使用@Binding@Published

比如ObservableObject我一般使用@Published,或者objectWillChange.send()

和 subview 中的@Binding将更改传播到父 View

但是我这里有一个片段,它似乎可以同时使用 @Binding@PublishedObservableObject

我考虑有什么区别。

@Binding var input: T
@Binding var validation: Validation

@Published var value: T {
didSet {
self.input = self.value
self.validateField()
}
}

init(input: Binding<T>, rules: [Rule<T>], validation: Binding<Validation>) {
self._input = input
self.value = input.wrappedValue
self.rules = rules
self._validation = validation
}

根据我的测试,似乎如果我将 TextField 绑定(bind)到 @Published,则会调用 didSet,但如果我将它绑定(bind)到 @Binding,则不会调用 didSet。

最佳答案

对于@Binding,我发现如果直接赋值给属性,就会调用didSet。尝试在 xcode playground 中运行此示例:

import SwiftUI
import Combine

struct MyView: View {
@Binding var value: Int {
didSet {
print("didSet", value)
}
}

var body: some View { Text("Hello") }
}

var myBinding = Binding<Int>(
get: { 4 },
set: { v in print("set", v)})

let view = MyView(value: myBinding)
view.value = 99

输出:

set 99
didSet 4

关于@Published@Binding的区别:

  • 您通常会使用 @Binding 将源自某些真实来源(例如 @State)的绑定(bind)传递到 View 层次结构中。
  • ObservableObject 中使用 @Published 以允许 View 对属性的更改使用react。

关于binding - SwiftUI 和 Combine Published 和 Binding 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59203083/

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