我有一个采用我想要重构的
ObservableObject
协议的类。该类不应采用协议,而应使用 @Observable
宏进行标记。现在我遇到了该类的属性之一的问题:@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
。使用宏时出现错误Property wrapper cannot be applied to a computed property
。我尝试删除该属性并使用 AppDelegate
在类中需要的所有位置访问 let appDelegate = UIApplication.shared.delegate as! AppDelegate
,但这会导致崩溃。
如何从标有
AppDelegate
宏的类中访问 @Observable
?
@UIApplicationDelegateAdaptor
只能用在一个地方,例如在 App
结构中:
struct MyApp: App {
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
如果你想先在其他地方访问它,你应该符合
ObservableObject
,例如
class AppDelegate: UIResponder, ObservableObject {
}
然后在您的
View
模型中您可以执行以下操作:
struct ContentView {
@EnvironmentObject var appDelegate: AppDelegate
如果您需要另一个对象中的
AppDelegate
,那么您可以在 AppDelegate
中初始化另一个对象并传入 weak self
。