SwiftUI中的Binding
为我们提供了双向绑定的功能,来确保View内部与外部的数据具备一致性,并且在系统组件中也有很多的应用。除了最基本的在TextField
中使用Binding<String>
来传递字符串数据、在Toggle
中使用Binding<Bool>
来记录当前开关状态,还有其他很多使用,比如在Picker
中使用Binding<SelectionValue:Hashable>
来记录当前选中项、在TabView
中使用Binding<SelectionValue:Hashable>?
来决定当前哪个TabItem是在屏幕上活跃的、为拓展Present视图的sheet
方法中的Binding<Item:Identifiable?>
等等。
在最开始使用SwiftUI构建功能组件的时候,往往会沿用在UIKit中的构建思路。编写的组件虽说也是可以使用,但是不论在api的简洁性上,还是在具体实现上都与系统提供的差一些意思。虽然SwiftUI为我们提供的组件有很多,但是细看归类还是可以发现大部分还是有一定设计规范的,比如数据传递中对Binding的运用,从上面列举的一部分就可以发现在某些场景下会使用对应的模式。本文会对系统提供的Binding进行应用场景的归类,接着结合两个具体的开发实例来讨论下如何编写符合SwiftUI设计理念的组件。