HotSwiftUI

用于 HotReloadingInjectionIII 的实用工具方法,以便对功能齐全的 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