如何解决如何正确处理二级类中的@EnvironmentObject
使用@EnvironmentObject时,可以在另一个类中使用@EnvironmentObject吗?
我有一个设置(MeetingStats)类,然后是一个处理类(Meeting)。处理类和设置类都通过我应用中的不同选项卡显示。因此,如果可以在安装程序中更改设置,则应该实时看到对处理类的更改(主要由计时器驱动)。
我试图从使用AppDelegate切换到在视图之间传递东西,而改用@EnvironmentObject。我已经更改了ScceneDelegate来创建初始对象,并将它们.envrionmentObjects传递给ContentView。但是,当我运行该应用程序时,第一次尝试访问处理类中的安装程序类时,我崩溃,并发现消息:MeetingStats类型的No ObservableObject。作为该视图的祖先,可能缺少用于MeetingStats的View.environmentObject(_:)。
SceneDelegate
class SceneDelegate: UIResponder,UIWindowSceneDelegate {
var meetingStats = MeetingStats()
var meeting = Meeting()
func scene(_ scene: UIScene,willConnectTo session: UISceneSession,options connectionOptions: UIScene.ConnectionOptions)
{
if let windowScene = scene as? UIWindowScene {
let window = UIWindow(windowScene: windowScene)
// passing EnvironmentObjects
window.rootViewController = UIHostingController(rootView:
ContentView()
.environmentObject(meeting)
.environmentObject(meetingStats)
)
self.window = window
window.makeKeyAndVisible()
}
}
}
Content View是一组选项卡,一个用于会议,一个用于设置,一个用于统计
meeting.swift-简化以显示问题区域
//
// meeting.swift
import Foundation
import SwiftUI
import Combine
import Intents
import os
class Meeting: ObservableObject {
@EnvironmentObject var meetingStats: MeetingStats
@objc func calcQuorumEvents() {
// LOTS of calcualtions
self.meetingStats.totalWasteAmount = totalWasteAmount. // HERE's the Crash
self.meetingStats.totalWasteAmountPersonal = totalWasteAmountPersonal
self.meetingStats.totalLifetimeWasteAmount = totalLifetimeWasteAmount
}
}
问题不是我没有将值从contentView显式传递给选项卡吗?我尝试将环境对象显式传递给MeetingView,但仍然收到相同的错误:
iOSMeetingView()
.environmentObject(meeting)
.environmentObject(meetingStats)
.tabItem {
Image("presentation")
Text("Meeting")
}.tag(1)
我不认为这是必需的,因为Swift会在对象层次结构中查找对象。
解决方法
您是否在视图iOSMeetingView中添加了环境对象?
import pandas as pd
from io import StringIO
csv = StringIO('''product,brand,price
macbook,Apple,1000
macbook air,1200
macbook pro,1400
thinkbook,Lenovo,600
thinkpad,800
''')
df = pd.read_csv(csv)
编辑:我不确定您的要求。这是我的想法。仅将EnvironmentObject MeetingStats传递给查看,您将在Meeting中更新时获得MeetingStats的值更改。
@EnvironmentObject var meetingStats: MeetingStats
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。