SwiftUI解读
SwiftUI
优点解读
-
Apple 对待开发者,就像是在对待新手一样,极尽所能的去简化开发过程,减少开发中的工作量,甚至还要让开发变成一件优雅的事情,这从 Xcode 的外观功能设计到系统 API 再到 Swift 语言都是如此
-
在设计 SwiftUI 的 API 时,Apple 隐藏了大量的内部细节,让开发者调用尽可能少的代码就能实现相应的效果,开发者不需要重写初始化方法。
-
SwiftUI 的实时预览分为静态预览和动态预览。默认情况下展示的是静态预览,它的速度快,而且支持代码和可视化两种编写方式。不过它没有任何响应事件,无法滚动和跳转页面。如果需要动态调试,则需要切换到动态预览。动态预览需要经过一段编译时间,然后可以以完全动态的形式实时响应 UI 的变化,而且可以在真机上实时调试
-
Language 选择Swift,并勾选SwiftUI,如下图
-
The first structure conforms to the View protocol and describes the view’s content and layout. The second structure declares a preview for that view.
所以这儿声明的两个结构体,更像是遵循了View和PreviewProvider协议。
import SwiftUI
struct ContentView: View {
var body: some View {
Text("Hello World")
}
}
struct ContentView_Preview: PreviewProvider {
static var previews: some View {
ContentView()
}
}
功能解读
-
当然SwiftUI的JIT也有很强的问题反馈能力,可以清楚的定位到问题,如下图
-
比OC更简洁的写法,起码能省一百行代码的赶脚
-
Click to open an inspector to select font, color, alignment, and other design options, and easily re-arrange controls with your cursor. Many of these visual editors are also available within the code editor, so you can use inspectors to discover new modifiers for each control, even if you prefer hand-coding parts of your interface. You can also drag controls from your library and drop them on the design canvas or directly on the code.
强大的拖拽,也能大大提升速率,对待新手是绝对的友好
属性装饰器
- @State
通过使用 @State 修饰器我们可以关联出 View 的状态. SwiftUI 将会把使用过 @State 修饰器的属性存储到一个特殊的内存区域,并且这个区域和 View struct 是隔离的. 当 @State 装饰过的属性发生了变化,SwiftUI 会根据新的属性值重新创建视图
- @Binding
有时候我们会把一个视图的属性传至子节点中,但是又不能直接的传递给子节点,因为在 Swift 中值的传递形式是值类型传递方式,也就是传递给子节点的是一个拷贝过的值。但是通过 @Binding 修饰器修饰后,属性变成了一个引用类型,传递变成了引用传递,这样父子视图的状态就能关联起来了。
- @ObservedObject
@ObservedObject 的用处和 @State 非常相似,从名字看来它是来修饰一个对象的,这个对象可以给多个独立的 View 使用。如果你用 @ObservedObject 来修饰一个对象,那么那个对象必须要实现 ObservableObject 协议,然后用 @Published 修饰对象里属性,表示这个属性是需要被 SwiftUI 监听的
- @EnvironmentObject
从名字上可以看出,这个修饰器是针对全局环境的。通过它,我们可以避免在初始 View 时创建 ObservableObject, 而是从环境中获取 ObservableObject