创建项目.png
项目文件.png
SceneDelegate
交接。Preview Assets.xcassets
AppDelegate
中通过application(_:configurationForConnecting:options)
返回一个UISceneConfiguration
实例SceneDelegate
,它的 scene(_:willConnectTo:options:)
将会被调用,设置window
的根视图控制器ContentView
中的View
,显示出来在SceneDelegate.swift
中会看到这样的代码:
//创建window
let window = UIWindow(windowScene: windowScene)
//设置window的rootViewController
window.rootViewController = UIHostingController(rootView: ContentView())
self.window = window
window.makeKeyAndVisible()
window
的rootViewController
时,初始化了ContentView
,UI 界面就可以显示出来UIKit
纯代码构建 iOS 程序中,会经常在 AppDelegate
中写上类似的代码,不同的就是rootViewController
为UIHostingController
类型的,UIHostingController
是UIViewController
的子类,主要负责接受一个SwiftUI
的View
的描述并将其用UIKit
进行渲染import SwiftUI
struct ContentView : View {
var body: some View {
Text("Hello SwiftUI")
}
}
struct ContentView_Previews : PreviewProvider {
static var previews: some View {
ContentView()
}
}
ContentView
,以前我们在 ViewController
使用代码或者利用 StoryBoard
、XIB
来完成的布局界面的事情,现在一个继承自 View
的结构体搞定ContentView
内部,有一个 body
,返回一个 Swift5.1 中新增的不透明的返回类型
,意思就是返回某种 View
,但是 body
不需要关心具体的内容body
不能返回很多 View
或不返回任何 View
,此时Swift编译器都会报错,所以务必记住 body
必须始终返回一个 View
body
中的 Text("Hello SwiftUI")
,表示创建了文本Hello SwiftUI
的标签ContentView_Previews
,与ContentView
类似,它专门用于在Xcode中显示视图预览。Xcode 11 + macOS 10.15
可以实时预览 SwiftUI 实现的界面,这个预览可以帮助我们快速查看代码对应的效果而不需要运行。
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
Group {
ContentView()
// 预览设备
.previewDevice(PreviewDevice(rawValue: "iPhone 11"))
// 预览设备名称
.previewDisplayName("iPhone 11")
ContentView()
.previewDevice(PreviewDevice(rawValue: "iPhone 11 Pro Max"))
.previewDisplayName("iPhone 11 Pro Max")
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
Group {
// 超大文本
ContentView()
.environment(\.sizeCategory, .accessibilityExtraExtraExtraLarge)
// 深色模式
ContentView()
.environment(\.colorScheme, .dark)
// 导航视图
NavigationView {
ContentView()
}
}
}
}