SwiftUI学习之state和Binding的区别浅析

 更新时间:2021年03月28日 15:35:29   作者:树下  
这篇文章主要给大家介绍了关于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区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Swift中的HTTP模拟测试示例详解

    Swift中的HTTP模拟测试示例详解

    这篇文章主要为大家介绍了Swift中的HTTP模拟测试示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • Swift使用WKWebView在iOS应用中调用Web的方法详解

    Swift使用WKWebView在iOS应用中调用Web的方法详解

    这篇文章主要介绍了Swift使用WKWebView在iOS应用中调用Web的方法详解,使用WKWebView便等于使用和Safari中相同的JavaScript解释器,用来替代过去的UIWebView,需要的朋友可以参考下
    2016-04-04
  • Swift重构自定义空等运算符 “??=” 实例

    Swift重构自定义空等运算符 “??=” 实例

    这篇文章主要为大家介绍了Swift重构自定义空等运算符 “??=” 实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • 详解Swift编程中的for循环的编写方法

    详解Swift编程中的for循环的编写方法

    这篇文章主要介绍了Swift编程中的for循环的编写方法,包括相关的for...in循环,需要的朋友可以参考下
    2015-11-11
  • swift自定义表格控件(UITableView)

    swift自定义表格控件(UITableView)

    这篇文章主要为大家详细介绍了swift自定义表格控件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 深入解析Swift代理模式

    深入解析Swift代理模式

    委托(代理)是一种设计模式,它允许类或结构体将一些需要它们负责的功能交由(委托)给其他的类型。下面这篇文章主要介绍了Swift代理模式的相关资料,文章开始先介绍了Objective-C相关的内容,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-03-03
  • Swift中的命名空间详解

    Swift中的命名空间详解

    这篇文章主要给大家介绍了关于Swift中命名空间的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • Swift Set集合及常用方法详解总结

    Swift Set集合及常用方法详解总结

    Set集合为集类型,集是最简单的一种集合,存放于集中的对象不按特定方式排序,只是简单地把对象加入集合中,类似于向口袋里放东西,对集中存在的对象的访问和操作是通过对象的引用进行的,因此在集中不能存放重复对象
    2021-11-11
  • swift4更新中所遇到的一些问题总结

    swift4更新中所遇到的一些问题总结

    这篇文章主要给大家介绍了关于在swift4更新中所遇到的一些问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-12-12
  • 浅析Swift中struct与class的区别(汇编角度底层分析)

    浅析Swift中struct与class的区别(汇编角度底层分析)

    这篇文章主要介绍了Swift中struct与class的区别 ,本文从汇编角度分析struct与class的区别,通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03

最新评论