用于 HotReloading 或 InjectionIII 的实用工具方法,以便对功能齐全的 SwiftUI 应用程序进行实时代码更新。
将此仓库添加到您的项目中,并将以下内容添加到源文件中。
@_exported import HotSwiftUI
这将使 SwiftUI.View
上的 .eraseToAnyView()
方法在整个应用程序中可用,该方法用于擦除它们的类型,以及您可以观察的全局 injectionObserver
变量,以便在代码注入时强制 View 更新。 SwiftUI 非常适合注入,因为只要您观察具有 @Published
注入计数器的 injectionObserver,您就可以放心您的视图会根据需要进行更新。
简而言之,修改您的 SwiftUI
View 的 body 属性的结尾,使其看起来像这样
var body: some View {
// Your SwiftUI code...
.eraseToAnyView()
}
#if DEBUG
@ObservedObject var iO = injectionObserver
#endif
// or use the new property wrapper...
@ObserveInjection var redraw
您需要为所有您想要注入并在注入时刷新的视图属性执行此操作,这有点乏味,但 InjectionIII 或 HotReloading 应用程序可以使用“准备项目”菜单项自动进行这些更改。您可以提交这些更改,因为在“Release”版本中,这些函数会编译为空操作。
此代码有一个兼容版本,以及为在项目中“托管”UIViewControllers 而进一步开发的想法:https://github.com/krzysztofzablocki/Inject。