swiftUI笔记
概念
Source of Truth:
value type: struct, enum, Int 等
reference type: class
observable:
@State 将 值类型 标记为 真实数据源
将property包装为 真实数据源(Source of Truth). 当@State property 修改时, 依赖的此property 的 View 都会刷新. @State 只能包装值类型(Value Type), 比如: struct, enum
@Bingding
@Binding 修饰的 property 可以与一个 单一数据源(Source of Truth), 共享读写. @Binding 不会直接存放数据
$ 语法
用 $变量名 , 可以创建Bingding
@ObservedObject, @StateObject, @EnvironmentObject 将 引用类型(reference type) 标记为 真实数据源(source of truth)
class 实现 ObservableObject 表示 class 是 可观察的(observable), 值修改需要重绘UI的属性, 用@Published 标记. published属性变化时, 会通知所有观察者
监听: UI组件通过 ObservedObject, StateObject, 或者 EnvironmentObject 标记属性, 来实现对 observable属性 的监听(成为该属性的观察者), 被标记的视图属性, 会创建对应的 真实数据源(source of truth)
创建 可观察对象 时用 @StateObject 声明. 要从外部传入的 可观察对象 用 @ObservedObject 声明.
一些特性
This limit of 10 children inside a parent actually applies everywhere in SwiftUI.
// SwiftUI很多View都限制最多只能10个子ViewGroup 可对子View分组来避免超过10个的限制,而且不会改变显示效果