use*_*037 36 swift swiftui combine
我有一个模型,它是一个ObservableObject. 它有一个Bool属性,我想用这个Bool属性来初始化一个@Binding变量。
@ObservableObjecta转换为 a @Binding?@State是初始化 a 的唯一方法@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)
Run Code Online (Sandbox Code Playgroud)
Asp*_*eri 41
Binding 可以通过以下方式创建变量:
@State 变量的投影值提供了一个 Binding<Value>@ObservedObject变量的投影值提供了一个包装器,您可以从中获取Binding<Subject>它所有属性的@EnvironmentObject。let button = SaleButton(isOn: .init(get: { car.isReadyForSale },
set: { car.isReadyForSale = $0} ))
Run Code Online (Sandbox Code Playgroud)
笔记:
@State/ @ObservedObject/ @EnvironmentObject/ @StateObject(在 SwiftUI 2.0 中添加),以便 SwiftUI 自动检测更改。$前缀可以方便地访问投影值。nay*_*yem 15
您有多种选择来观察ObservableObject. 如果要和对象的状态保持同步,就不可避免地要观察有状态对象的状态。从选项中,最常见的是:
@State@ObservedObject@EnvironmentObject这取决于您,哪一种适合您的用例。
在现实中,你会有这样的事情:
class Car: ObservableObject {
@Published var isReadyForSale = true
}
struct ContentView: View {
// It's upto you whether you want to have other type
// such as @State or @ObservedObject
@EnvironmentObject var car: Car
var body: some View {
SaleButton(isOn: $car.isReadyForSale)
}
}
struct SaleButton: View {
@Binding var isOn: Bool
var body: some View {
Button(action: {
self.isOn.toggle()
}) {
Text(isOn ? "Off" : "On")
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您准备好了,@EnvironmentObject您将使用以下命令初始化您的视图:
let contentView = ContentView().environmentObject(Car())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19074 次 |
| 最近记录: |