1.SwiftUI2.0程序的入口

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

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(Domain-Specific Language)来描述的。

2.预览多个尺寸(适配)–>预览界面多个显示模拟器

默认情况下,Xcode 会使用你当前选取的 iOS 模拟器 作为预览尺寸

struct ContentView_Previews : PreviewProvider {
    static var previews: some View {
        Group {
            ContentView()
            ContentView().previewDevice("iPhone SE")
            ContentView().previewDevice("iPad Air 2")
        }
    }
}

3.分割线

Divider().padding(.vertical, 2)