这篇文章主要介绍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的区别有哪些”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。