经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Swift » 查看文章
SwiftUI学习之state和Binding的区别浅析
来源:jb51  时间:2021/3/29 8:51:08  对本文有异议

@state 绑定值的状态,其属性的修饰官方推荐使用private.上代码(ps:这里没用private 进行修饰,是为了演示区别)
import SwiftUI

  1. struct FilterView: View {
  2. // @Binding var isFavorite: Bool
  3. @State var isFavorite = true
  4. var body: some View {
  5. Toggle(isOn: $isFavorite) {
  6. }
  7. let buttonTitle = isFavorite ? "呕吼" : "顿顿"
  8. Text(buttonTitle)
  9. }
  10. }
  11. struct ProductView: View {
  12. var titleS: String
  13. //:不想让外部访问的变量 需要初始化
  14. @State private var changeButtonTtile = true
  15. var body: some View {
  16. Button (action: {
  17. changeButtonTtile.toggle()
  18. }) {
  19. let buttonTitle = changeButtonTtile ? "哈哈哈" : "啦啦啦啦"
  20. Text(buttonTitle)
  21. FilterView(isFavorite: changeButtonTtile)
  22.  
  23. }
  24. }
  25. }
  26.  

这里我们看到 @State  var isFavorite = true通过state 进行修饰.这个时候我们点击FilterView的开关 我们只能刷新当前FilterView的界面.注意这里:FilterView(isFavorite: changeButtonTtile) 初始化传入的是changeButtonTtile的value,也就实际值.

下面我们把State注释掉 ,打开@Bingding 那一行

  1. import SwiftUI
  2.  
  3. struct FilterView: View {
  4. @Binding var isFavorite: Bool
  5. // @State var isFavorite = true
  6. var body: some View {
  7. Toggle(isOn: $isFavorite) {
  8. }
  9. let buttonTitle = isFavorite ? "呕吼" : "顿顿"
  10. Text(buttonTitle)
  11. }
  12. }
  13. struct ProductView: View {
  14. var titleS: String
  15. //:不想让外部访问的变量 需要初始化
  16. @State private var changeButtonTtile = true
  17. var body: some View {
  18. Button (action: {
  19. changeButtonTtile.toggle()
  20. }) {
  21. let buttonTitle = changeButtonTtile ? "哈哈哈" : "啦啦啦啦"
  22. Text(buttonTitle)
  23. FilterView(isFavorite: $changeButtonTtile)
  24. //:注意这里的取值 变成了$
  25. }
  26. }
  27. }
  28.  

这里我们运行代码,点击开关,你发现了什么??.ProductView 的UI 也发生了变化.这个时候FilterView 传入的是changeBtnTitle的引用,而不是值.这样你在子视图改变@Binding修饰的值,父视图也会跟着刷新.

使用小结

  • 当自定义视图的数据需要外部传入的时候, 使用普通的属性
  • 当自定义的视图需要通过数据变化更新视图时, 对普通属性加上@State修饰
  • 当自定义的视图需要将视图的变化表现在数据的变化时,对普通属性加上@Binding修饰, @Binding 包含了@State的功能, 但一般不会去对@Binding属性做修改

总结

到此这篇关于SwiftUI学习之state和Binding区别的文章就介绍到这了,更多相关SwiftUI state和Binding区别内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号