SwiftUI 2.0 能否构建整个iOS应用(wwdc20)

使用SwiftUI能否构建整个iOS应用

直到今年的发布,使用SwiftUI构建的应用仍需要使用Apple以前的UI框架UIKit和AppKit中的机制来实现其入口点,例如使用UIApplicationDelegate定义iPhone或iPad应用的应用委托。

然而,今年,由于其API的一些新增功能,现在可以直接使用SwiftUI定义整个应用程序。 例如,假设我们正在构建一个播客应用程序,该应用程序使用TabView作为其根视图,然后它包含三个选项卡-库视图,发现视图和搜索视图:

struct RootView: View {
    var body: some View {
        TabView {
            LibraryView()
            DiscoverView()
            SearchView()
        }
    }
}

在去年的iOS 13及其兄弟操作系统上,我们不得不使用UIHostingController(或在Mac上为NSHostingController)来实际呈现上述视图,例如,将其分配为UIWindow的rootViewController。 但是现在,上面的根视图层次结构可以简单地嵌入符合新App协议的类型中,并通过使用Swift的新@main属性注释该类型,它将用作我们应用程序的入口点-无需 任何应用程序委托或任何其他引导代码:

@main struct PodcastApp: App {
    var body: some Scene {
        WindowGroup {
            TabView {
                LibraryView()
                DiscoverView()
                SearchView()
            }
        }
    }
}

上面的WindowGroup类型是另一个新协议Scene的内置实现,它是一个本机SwiftUI,等效于去年引入的UIScene API,主要是为了使iPad应用程序获得多窗口支持。

虽然我们也可以创建自己的自定义场景类型,但是如果希望始终在我们所有应用程序场景中呈现相同的视图层次结构,那么仅使用WindowGroup是一个不错的选择。

但很酷的事情是,由于SwiftUI如此可组合,即使我们选择构建自己的Scene,我们仍然可以使用WindowGroup来实现其主体,同时还提供我们自己的自定义逻辑。

例如,在这里我们为播客应用程序构建了一个自定义场景,该场景使用新的scenePhase环境值来观察场景的整体相位何时发生变化,例如,检测场景何时从活动状态变为非活动状态:

struct PodcastScene: Scene {
    @Environment(\.scenePhase) private var phase

    var body: some Scene {
        WindowGroup {
            TabView {
                LibraryView()
                DiscoverView()
                SearchView()
            }
        }
        .onChange(of: phase) { newPhase in
            switch newPhase {
            case .active:
                // App became active
            case .inactive:
                // App became inactive
            case .background:
                // App is running in the background
            @unknown default:
                // Fallback for future cases
            }
        }
    }
}

尽管新的App和Scene协议目前无法提供与UIKit和AppKit等效的功能和灵活性,但是某些应用程序现在可以使用基于100%SwiftUI的实现这一事实实在是太酷了,而且 SwiftUI作为框架向前迈出了一大步。

推荐

基础文章推荐

  • 《SwiftUI是什么,听听大牛们如何说》

经典教程推荐

  • 更新近百篇SwiftUI教程《SwiftUI2020教程》
  • 帮您突破数据存储难关《SwiftUI vs CoreData数据存储解决方案》

技术源码推荐

推荐文章

CoreData篇

  • SwiftUI数据存储之做个笔记App 新增与查询(CoreData)
  • SwiftUI进阶之存储用户状态实现登录与登出
  • SwiftUI 数据之List显示Sqlite数据库内容(2020年教程)

Combine篇

  • 一篇文章学懂弄通SwiftUI与Combine(含轮播动画App源码)

TextField篇

  • 《SwiftUI 一篇文章全面掌握TextField文本框 (教程和全部源码)》
  • 《SwiftUI实战之TextField风格自定义与formatters》
  • 《SwiftUI实战之TextField如何给键盘增加个返回按钮(隐藏键盘)》
  • 《SwiftUI 当键盘出现时避免TextField被遮挡自动向上移动》
  • 《SwiftUI实战之TextField如何给键盘增加个返回按钮(隐藏键盘)》

JSON文件篇

  • SwiftUI JSON文件下载、存储、解析和展示(代码大全)

一篇文章系列

  • SwiftUI一篇文章全面掌握List(教程和源码)
  • 《SwiftUI 一篇文章全面掌握TextField文本框 (教程和全部源码)》
  • SwiftUI一篇文章全面掌握Picker,解决数据选择(教程和源码)
  • SwiftUI一篇文章全面掌握Form(教程和源码)
  • SwiftUI Color 颜色一篇文章全解决

技术交流

QQ:3365059189
SwiftUI技术交流QQ群:518696470

  • 请关注我的专栏icloudend, SwiftUI教程与源码
    https://www.jianshu.com/c/7b3e3b671970

你可能感兴趣的:(SwiftUI 2.0 能否构建整个iOS应用(wwdc20))