这篇文章主要给大家介绍了关于SwiftUI学习之state和Binding区别的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
@state 绑定值的状态,其属性的修饰官方推荐使用private.上代码(ps:这里没用private 进行修饰,是为了演示区别)
import SwiftUI
struct FilterView: View {
// @Binding var isFavorite: Bool
@State var isFavorite = true
var body: some View {
Toggle(isOn: $isFavorite) {
}
let buttonTitle = isFavorite ? "呕吼" : "顿顿"
Text(buttonTitle)
}
}
struct ProductView: View {
var titleS: String
//:不想让外部访问的变量 需要初始化
@State private var changeButtonTtile = true
var body: some View {
Button (action: {
changeButtonTtile.toggle()
}) {
let buttonTitle = changeButtonTtile ? "哈哈哈" : "啦啦啦啦"
Text(buttonTitle)
FilterView(isFavorite: changeButtonTtile)
}
}
}
这里我们看到 @State var isFavorite = true通过state 进行修饰.这个时候我们点击FilterView的开关 我们只能刷新当前FilterView的界面.注意这里:FilterView(isFavorite: changeButtonTtile) 初始化传入的是changeButtonTtile的value,也就实际值.
下面我们把State注释掉 ,打开@Bingding 那一行
import SwiftUI
struct FilterView: View {
@Binding var isFavorite: Bool
// @State var isFavorite = true
var body: some View {
Toggle(isOn: $isFavorite) {
}
let buttonTitle = isFavorite ? "呕吼" : "顿顿"
Text(buttonTitle)
}
}
struct ProductView: View {
var titleS: String
//:不想让外部访问的变量 需要初始化
@State private var changeButtonTtile = true
var body: some View {
Button (action: {
changeButtonTtile.toggle()
}) {
let buttonTitle = changeButtonTtile ? "哈哈哈" : "啦啦啦啦"
Text(buttonTitle)
FilterView(isFavorite: $changeButtonTtile)
//:注意这里的取值 变成了$
}
}
}
这里我们运行代码,点击开关,你发现了什么??.ProductView 的UI 也发生了变化.这个时候FilterView 传入的是changeBtnTitle的引用,而不是值.这样你在子视图改变@Binding修饰的值,父视图也会跟着刷新.
使用小结
- 当自定义视图的数据需要外部传入的时候, 使用普通的属性
- 当自定义的视图需要通过数据变化更新视图时, 对普通属性加上@State修饰
- 当自定义的视图需要将视图的变化表现在数据的变化时,对普通属性加上@Binding修饰, @Binding 包含了@State的功能, 但一般不会去对@Binding属性做修改
总结
到此这篇关于SwiftUI学习之state和Binding区别的文章就介绍到这了,更多相关SwiftUI state和Binding区别内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:SwiftUI学习之state和Binding的区别浅析


基础教程推荐
- ruby-on-rails-使用Nginx的Rails的多阶段环境 2023-09-21
- R包ggtreeExtra绘制进化树 2022-12-14
- R语言基于Keras的MLP神经网络及环境搭建 2022-12-10
- asm基础——汇编指令之in/out指令 2023-07-06
- R语言数可视化Split violin plot小提琴图绘制方法 2022-12-10
- swift版webview加载网页进度条效果 2023-07-05
- Go web部署报错panic: listen tcp xxxxxxx:8090: bind: cannot assign requested address 2023-09-05
- R语言-如何将科学计数法表示的数字转化为文本 2022-11-23
- swift 字符串String的使用方法 2023-07-05
- UEFI开发基础HII代码示例 2023-07-07