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类型创建之自定义一个类型详解

    Swift类型创建之自定义一个类型详解

    这篇文章主要介绍了Swift类型创建之自定义一个类型详解,本文讲解了自定义原型、实现默认值、支持基本布尔型初始化、支持Bool类型判断、支持兼容各们各派的类型、完善OCBool的布尔基因体系等内容,需要的朋友可以参考下
    2015-05-05
  • Swift实现复数计算器

    Swift实现复数计算器

    这篇文章主要为大家详细介绍了Swift实现复数计算器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Swift 3中使用FMDB遇到的问题与解决方法

    Swift 3中使用FMDB遇到的问题与解决方法

    相信大家都熟悉OC使用FMDB第三方库,进行数据库操作,增、删、改、查,但最近在Swift 3中使用FMDB遇到了一些问题,下面这篇文章主要给大家介绍了关于在Swift 3中使用FMDB遇到的问题与解决方法,需要的朋友可以参考下。
    2017-07-07
  • Swift中转义闭包示例详解

    Swift中转义闭包示例详解

    在Swift 中的闭包类似于结构块,并可以在任何地方调用,下面这篇文章主要给大家介绍了关于Swift中转义闭包的相关资料,需要的朋友可以参考下
    2021-11-11
  • 深入理解swift变量和函数

    深入理解swift变量和函数

    Swift 函数用来完成特定任务的独立的代码块。这篇文章主要介绍了swift变量和函数的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-08-08
  • swift3.0 创建sqlite数据库步骤方法

    swift3.0 创建sqlite数据库步骤方法

    本篇文章主要介绍了swift3.0 创建sqlite数据库步骤方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • swift 3.0 正则表达式查找/替换字符的实现代码

    swift 3.0 正则表达式查找/替换字符的实现代码

    正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。本文重点给大家介绍swift 3.0 正则表达式查找/替换字符的实现代码,需要的朋友参考下吧
    2017-08-08
  • swift在IOS应用图标上添加提醒个数的方法

    swift在IOS应用图标上添加提醒个数的方法

    本文是通过swift语言实现在应用图标右上角添加消息个数提醒的功能,非常不错,具有参考借鉴价值,感兴趣的朋友一起看下吧
    2016-08-08
  • Swift语言中的一些访问控制设置详解

    Swift语言中的一些访问控制设置详解

    这篇文章主要介绍了Swift语言中的一些访问控制设置详解,是Swift入门学习中的基础知识,需要的朋友可以参考下
    2015-11-11
  • 详解Swift 中的幻象类型

    详解Swift 中的幻象类型

    让我们来看看一种技术,它可以让我们利用 Swift 的类型系统在编译时执行更多种类的数据验证消除更多潜在的歧义来源,并帮助我们在整个代码库中保持类型安全,通过使用幻象类型(phantom types),对Swift 幻象类型相关知识感兴趣的朋友一起看看吧
    2022-05-05

最新评论