gpt4 book ai didi

swift - 在不触发更改的情况下更新 @Binding 值

转载 作者:行者123 更新时间:2023-12-05 04:47:28 27 4
gpt4 key购买 nike

我有一个这样的结构体

@Binding var fieldValue:Float

init(fieldValue:Binding<Float>) {
self._fieldValue = fieldValue
}

在某些时候,我想更新 fieldValue 而不会触发监听 $fieldValue 的其他点的更新。

这可能吗?

最佳答案

问题是 SwiftUI 默认同步所有 Binding 并且没有办法显式禁用此行为。

但是,我们可以通过将属性包装在 ObservableObject 中来解决这个问题,并使用 Binding 根据所需的行为获得自定义 Binding (get:set:) 初始值设定项。

(请注意,这可能不适用于标准 UI 组件,例如 Slider,因为它们可能需要更新 Binding 才能正常工作。)

class ValueContainer: ObservableObject {

private var fieldValue: Float = 0

func getBinding(isTriggering: Bool) -> Binding<Float> {
Binding { [self] in
self.fieldValue
} set: { [self] newValue in
self.fieldValue = newValue
if isTriggering {
self.objectWillChange.send()
}
}
}

}

struct DoesNotTriggerUpdate: View {

@ObservedObject var container: ValueContainer

var body: some View {
Slider(value: container.getBinding(isTriggering: false))
}

}

struct DoesTriggerUpdate: View {

@ObservedObject var container: ValueContainer

var body: some View {
Slider(value: container.getBinding(isTriggering: true))
}

}

关于swift - 在不触发更改的情况下更新 @Binding 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68453957/

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