SwiftUI
SwiftUI 作为 WWDC19 发布的重磅猛料,显然是一个未来化的框架。其最大的特点就是采用声明式语法。SWiftUI 轻松就能声明(Declare)用户(user interface) 和行为(behavior),并且它们可以轻松跨设备使用。
Declare the user interface and behavior for your app on every platform.
0. Overview
SwiftUI 为你所声明的 UI 提供视图,控制,和布局结构;
并且为传递的响应(delivering taps),手势,和其他类型的输入提供 事件处理器(event handlers);
同时,可以管理
Model
到View
的数据流(flow of data),控制用户所见和交互;SwiftUI 中可以创建自定义view ,需要遵从
View protocol
;在 Xcode 中高度集成了便捷的操作,可以直接在可视状下,使得每一个每一个 view 可以方便的修饰和设置,Xcode 提供一个实时的反馈,这个确实极大提高效率。
在不同的 app 和 设备共享View代码,SwiftUI 控制适应着视图的上下文和外观,实现轻松的跨(跨 iOS)平台;
当然可以混编 SwiftUI 和 UIKit,WatchKit ,AppKit 相关框架从而取使用一些更高应用级别的框架具体功能。
极简的实现 Dark Model 切换 ,多语言,多地区切换。
1. Go SwiftUI
1.1 helloWorld with SwiftUI
创建一个 默认 SwiftUI 文件 如下:
import SwiftUI
struct ContentView: View {
var body: some View {
Text("Hello World")
}
}
struct ContentView_Preview: PreviewProvider {
static var previews: some View {
ContentView()
}
}
此刻右侧 canvas 区域 会出现 预览 “Preview”
代码中主要有两个部分:
ContentView : View
ContentView_Preview : PreviewProvider
PreviewProvider 负责提供 SwiftUI 的预览功能的。
当然你也可以一开始就注释掉它,拒绝SwiftUI带给你的最大优势,所写立即所 ️。
但我十分不建议你这样做
修改 View 中的内容,swiftUI 对于修饰view是 链式编程。
struct ContentView: View {
var body: some View {
Text("Hello Tim Cook!")
.font(.title)
.bold()
.foregroundColor(Color.primary) // .primary 是自动匹配 Dark Model
}
}
还有另外几种方便的设置方式
- command + click -> Inspector
- Add + moving
1.2 ”容器“ Stack
你可以尝试在一个view的body中直接添加一个view,这会直接语法错误。
var body: some View {
Text("Hello Tim !")
Text("Hello Cook!")
}
Function declares an opaque return type, but has no return statements in its body from which to infer an underlying type
因为SwiftUI是声明形语法,而对于两个Text,不能推测约束出一个唯一的布局。这里利用 stack 去帮助构造清晰的布局声明。
VStack {
//...
//垂直布局
}
HStack{
//...
//水平布局
}
List{
//...
//表布局
}
尝试写一个例子
VStack(alignment: .leading) {
Text("Turtle Rock")
.font(.title)
HStack {
Text("Joshua Tree National Park")
.font(.subheadline)
Spacer()
Text("California")
.font(.subheadline)
}
}.padding()
如果你有过 CSS 的基础,那么 alignment ,padding 这些词你不会陌生。
未完待续