gpt4 book ai didi

swift - 来自 ObservableObject 的绑定(bind)值

转载 作者:行者123 更新时间:2023-12-03 09:15:40 26 4
gpt4 key购买 nike

目标:

我有一个模型,它是 ObservableObject .它有一个 Bool属性(property),我想用这个Bool初始化 @Binding 的属性多变的。

问题:

  • 如何转换 @ObservableObject@Binding ?
  • 正在创建 @State初始化 @Binding 的唯一方法?

  • 笔记:
  • 我明白我可以使用 @ObservedObject/@EnvironmentObject ,我看到它很有用,但我不确定一个简单的按钮是否需要访问整个模型。
  • 还是我的理解不正确?

  • 代码:
    import SwiftUI
    import Combine
    import SwiftUI
    import PlaygroundSupport

    class Car : ObservableObject {

    @Published var isReadyForSale = true
    }

    struct SaleButton : View {

    @Binding var isOn : Bool

    var body: some View {

    Button(action: {

    self.isOn.toggle()
    }) {
    Text(isOn ? "On" : "Off")
    }
    }
    }

    let car = Car()

    //How to convert an ObservableObject to a Binding
    //Is creating an ObservedObject or EnvironmentObject the only way to handle a Observable Object ?

    let button = SaleButton(isOn: car.isReadyForSale) //Throws a compilation error and rightly so, but how to pass it as a Binding variable ?

    PlaygroundPage.current.setLiveView(button)

    最佳答案

    Binding可以通过以下方式创建变量:

  • @State变量的预计值提供 Binding<Value>
  • @ObservedObject变量的预计值提供了一个包装器,您可以从中获取 Binding<Subject>对于它的所有属性
  • 第 2 点适用于 @EnvironmentObject也是。
  • 您可以通过为 getter 和 setter 传递闭包来创建绑定(bind)变量,如下所示:
  • let button = SaleButton(isOn: .init(get: { car.isReadyForSale },
    set: { car.isReadyForSale = $0} ))
    注:
  • 正如@nayem 指出的那样,您需要@State/@ObservedObject/@EnvironmentObject/@StateObject (在 SwiftUI 2.0 中添加)在 SwiftUI 的 View 中自动检测更改。
  • 使用 $ 可以方便地访问投影值字首。

  • backup

    关于swift - 来自 ObservableObject 的绑定(bind)值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59259921/

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