SwiftUI @State与绑定 [英] SwiftUI @State vs Binding

查看:72
本文介绍了SwiftUI @State与绑定的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在学习使用Swift和SwiftUI进行iOS编程.我了解得很少,我对@StateBinding<*>之间的区别感到困惑.

I am learning iOS Programming with Swift and SwiftUI. I know very little and I am very confuse about the difference between a @State and a Binding<*>.

如果我正确理解,从技术上说Binding只是State,但它不会更新视图.如果是这样的话,那么为什么我只要用State做同样的事情,为什么还需要Binding?

If I understood it correctly, Binding is just technically State but it doesn't update the view. If that is the case then why would I need Binding if I could just use State to do the same thing?

推荐答案

SwiftUI是一个声明式的面向组件的框架.您必须忘了MVC,在MVC中,控制器在视图和模型之间进行中介. SwiftUI使用差异算法来了解更改并仅更新相应的视图.

SwiftUI is a declarative Component-Oriented framework. You have to forget about MVC where you have controllers mediating between view and model. SwiftUI uses diffing algorithm to understand changes and update only corresponding views.

@状态

  • State属性已连接到视图.视图将永久读取State属性.这意味着,每次更改/更新@State属性时,都会重新渲染视图,并最终根据@State的数据显示内容.
  • 状态仅可用于特定视图.
  • 简单的属性(例如字符串,整数和布尔值)属于单个视图-标记为私有.
  • 所有标记为状态"的字段都存储在特殊的单独存储器中,只有对应的视图才能访问和更新它们.

@Binding

  • BindableObject协议,该协议需要didChange属性.它可以在环境中使用它,并在更改后立即重建视图.
  • didChange属性应该是发布者,它是新的Apple名为合并"的Reactive框架的一部分.
  • 发布者的主要目标是在发生任何更改时通知所有订阅者.一旦出现新值,SwiftUI就会重建视图.

@EnvironmentObject

  • 它是名为Environment的功能的一部分.您可以使用所有必需的服务类填充您的环境,然后从该环境内的任何视图访问它们.
  • @EnvironmentObject可用于环境中的每个视图.
  • @EnvironmentObject在其他位置创建的属性,例如共享数据.如果缺少应用程序,则该应用程序将崩溃.
  • 环境是使用SwiftUI进行依赖项注入的正确方法.

这篇关于SwiftUI @State与绑定的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆