SwiftUI2.0

WWDC20中,苹果为开发者带来了基于SwiftUI的全新项目模板。使用该模板,将使项目代码变得异常简洁、清晰。

@main
struct NewAllApp: App {
    var body: some Scene {
        WindowGroup {
            Text("Hello world")
        }
    }
}

上述代码可以在屏幕上完成Hello world的显示,且能够运行于iOS和macOS平台下。

基本概念

  • App
    SwiftUI2.0提供的全新协议。通过声明一个符合App协议的结构来创建一个程序,并通过计算属性body来实现程序的内容。
    通过@main(swift5.3 新特性)设定程序的入口,每个项目只能有一个进入点
    管理整个app的生命周期
    在这个作用域下声明的常量、变量其生命周期与整个app是完全一致的。

  • Scene
    场景是视图(View)层次结构的容器。通过在App实例的body中组合一个或多个符合Scene协议的实例来呈现具体程序。

  • 生命周期由系统管理
    系统会根据运行平台的不同而调整场景的展示行为(比如相同的代码在iOS和macOS下的呈现不同,或者某些场景仅能运行于特定的平台)
    SwiftUI2.0提供了几个预置的场景,用户也可以自己编写符合Scene协议的场景。上述代码中便是使用的一个预置场景WindowGroup
    通过App和Scene的加入,绝不是仅仅减少代码量这么简单。通过这个明确的层级设定,我们可以更好的掌握在不同作用域下各个部分的生命周期、更精准数据传递、以及更便利的多平台代码共享。本文后面会用具体代码来逐个阐述。

App和Scene都是通过各自的functionBuilder来解析的,也就是说,新的模板从程序的入口开始便是使用DSL来描述的。