根据苹果官方指南,我猜如果每个视图只有一个environmentObject,那么这样做就可以了。当碰巧有多个对象时,我不确定对象是如何引用的。
struct LandmarkList: View {
@EnvironmentObject private var userData: UserData
...
ForEach(userData.landmarks) { landmark in
if !self.userData.showFavoritesOnly || landmark.isFavorite {
NavigationLink(
destination: LandmarkDetail(landmark: landmark)
.environmentObject(self.userData)
) {
LandmarkRow(landmark: landmark)
}
}
}上面是苹果官方指南中的代码,位于LandMarkDetail文件中
struct LandmarkDetail: View {
@EnvironmentObject var userData: UserData我想知道LandMarkList中的environmentObject是如何引用LandmarkDetail中的环境对象的。它们被捆绑了吗?我在文件中添加了第二个EnvironmentObject,但什么也没有发生
struct LandmarkDetail: View {
@EnvironmentObject var userData: UserData
@EnvironmentObject var testData: UserData那么如何分别引用userData和testData呢?
编辑:我尝试在以下文件中添加环境对象:
import SwiftUI
struct LandmarkList: View {
@EnvironmentObject private var userData: UserData
@EnvironmentObject private var testData: TestData
var body: some View {
NavigationView {
List {
Toggle(isOn: $userData.showFavoritesOnly) {
Text("Show Favorites Only")
}
Toggle(isOn: $testData.testbool) {
Text("Test")
}
...struct LandmarksList_Previews: PreviewProvider {
static var previews: some View {
ForEach(["iPhone SE", "iPhone XS Max"], id: \.self) { deviceName in
LandmarkList()
.previewDevice(PreviewDevice(rawValue: deviceName))
.previewDisplayName(deviceName)
}
.environmentObject(UserData())
.environmentObject(TestData())
}
}final class TestData: ObservableObject {
@Published var testbool = false
}预览崩溃了。Xcode可以编译,但立即显示以下错误
Fatal error: No ObservableObject of type TestData found.
A View.environmentObject(_:) for TestData may be missing as an ancestor of this view.: file /BuildRoot/Library/Caches/com.apple.xbs/Sources/Monoceros_Sim/Monoceros-30.4/Core/EnvironmentObject.swift, line 55
2019-10-12 19:07:46.565707+0800 Landmarks[13034:643289] Fatal error: No ObservableObject of type TestData found.
A View.environmentObject(_:) for TestData may be missing as an ancestor of this view.: file /BuildRoot/Library/Caches/com.apple.xbs/Sources/Monoceros_Sim/Monoceros-30.4/Core/EnvironmentObject.swift, line 55发布于 2019-10-22 15:58:23
别忘了在Scenedelegate中执行此操作以绑定您的对象:
window.rootViewController = UIHostingController(rootView: contentView.environmentObject(TestData()).environmentObject(UserData()))https://stackoverflow.com/questions/58353396
复制相似问题