一、如何创建常量绑定?

  • 当正在制作一些 UI 原型时,或者当只需要传入一个值来让 SwiftUI 预览显示一些有意义的东西时,可以会发现使用常量绑定很有帮助:硬编码的值不会改变,但可以仍然像常规绑定一样使用,因此我们的代码可以正常工作。
  • 例如,如果想创建一个切换开关,通常必须创建一个@State 属性来存储布尔值,然后在创建它时将其发送到切换开关中;但是,如果只是为用户界面设计原型,则可以改用常量绑定,如下所示:
Toggle(isOn: .constant(true)) {Text("Show advanced options")
}
  • 效果如下:

  • 该开关是只读的并且始终处于开启状态,因为这就是我们的常量绑定所说的,但现在足以让您动起来,可以稍后返回并用完整的 @State 属性替换它。这些常量绑定有各种类型:布尔值、字符串、整数等都可用,Swift 将确保为每种视图类型使用正确的绑定。

二、如何创建自定义绑定?

  • 当使用 SwiftUI 的 @State 属性包装器时,它为我们做了大量的工作来允许用户界面控件的双向绑定。 但是,我们也可以使用 Binding 类型手动创建绑定,它可以提供自定义的 get 和 set 闭包,以便在读取或写入值时运行。
  • 例如,创建一个简单的绑定,它只是作为另一个属性的传递:
struct ContentView: View {@State private var username = ""var body: some View {let binding = Binding(get: { self.username },set: { self.username = $0 })return VStack {TextField("Enter your name", text: binding)}}
}
  • 当绑定到自定义 Binding 实例时,不需要在绑定名称前使用 $ 符号,因为已经阅读了双向绑定。
  • 当想为正在读取或写入的绑定添加额外的逻辑时,自定义绑定非常有用,我们可能希望在将值发回之前执行一些计算,或者可能希望在值更改时采取一些额外的操作。例如,可以创建一个由两个切换开关组成的堆栈,其中两个开关都可以关闭,一个可以打开,但不能同时打开,启用一个将始终禁用另一个,如下所示:
struct ContentView: View {@State private var firstToggle = false@State private var secondToggle = falsevar body: some View {let firstBinding = Binding(get: { self.firstToggle },set: {self.firstToggle = $0if $0 == true {self.secondToggle = false}})let secondBinding = Binding(get: { self.secondToggle },set: {self.secondToggle = $0if $0 == true {self.firstToggle = false}})return VStack {Toggle(isOn: firstBinding) {Text("First toggle")}Toggle(isOn: secondBinding) {Text("Second toggle")}}}
}

SwiftUI之如何创建常量绑定与自定义绑定相关推荐

  1. 第五章:创建自定义绑定

    你可以创建自己的自定义绑定 – 没有必要非要使用内嵌的绑定(像click,value等).你可以你封装复杂的逻辑或行为,自定义很容易使用和重用的绑定.例如,你可以在form表单里自定义像grid,ta ...

  2. Knockout.Js官网学习(创建自定义绑定)

    前言 你可以创建自己的自定义绑定 – 没有必要非要使用内嵌的绑定(像click,value等).你可以你封装复杂的逻辑或行为,自定义很容易使用和重用的绑定.例如,你可以在form表单里自定义像grid ...

  3. jaxb util_JAXB自定义绑定– Java.util.Date / Spring 3序列化

    jaxb util JaxB可以处理Java.util.Date序列化,但是需要以下格式: " yyyy-MM-ddTHH:mm:ss ". 如果需要将日期对象格式化为另一种格式怎 ...

  4. JAXB自定义绑定– Java.util.Date / Spring 3序列化

    JaxB可以处理Java.util.Date序列化,但是需要以下格式: " yyyy-MM-ddTHH:mm:ss ". 如果需要将日期对象格式化为另一种格式怎么办? 我有同样的问 ...

  5. WCF 第十二章 对等网 使用自定义绑定实现消息定向

    当使用对等传输信道时会有一个常见的错误,就是认为它支持在一个对等网状网络间定向通信.消息定向意味着一条消息可以在一个对等网状网络中通过跨越一个网状网络将其传播到目的端(这就是路由的原理)来发送到特定节 ...

  6. 5.Knockout.Js(自定义绑定)

    前言 你可以创建自己的自定义绑定 – 没有必要非要使用内嵌的绑定(像click,value等).你可以你封装复杂的逻辑或行为,自定义很容易使用和重用的绑定.例如,你可以在form表单里自定义像grid ...

  7. 如何在Python中创建常量?

    有没有办法在Python中声明常量? 在Java中,我们可以按以下方式创建常量值: public static final String CONST_NAME = "Name"; ...

  8. DirectX12(D3D12)基础教程(四)——初识DirectXMath库、使用独立堆创建常量缓冲、理解管线状态对象、理解围栏同步

    目录 1.前言及本章内容提要 2.初识DirectXMath库 3.使用独立堆创建常量缓冲 4.理解管线状态对象 5.理解围栏同步 6.完整代码 1.前言及本章内容提要 经过了之前3篇教程的跨度有点大 ...

  9. Maven插件自定义绑定

    除了内置绑定以外,用户还能够自己选择将某个插件目标绑定到生命周期的某个阶段上,这种自定义绑定方式能让Maven项目在构建过程中执行更多更富特色的任务. 一个常见的例子是创建项目的源码jar包.内置的插 ...

最新文章

  1. 电脑系统修复有多重要?
  2. 为什么on用的时候会失效?
  3. JAVA 一个或多个空格分割字符串
  4. ios 图片居中裁剪_IOS图片裁剪和小图看大图动画
  5. python简单的分析文本
  6. 用于创建此对象的程序是excel_一起学Excel专业开发22:使用类模块创建对象1
  7. 心电信号频谱图低通Matlab,心电信号处理分析.ppt
  8. vs2012 有效产品密钥
  9. JAVA的MySQL字符串拼接_MySQL字符串拼接、截取
  10. Oracle 中 varchar2 和 mysql 中 varchar到底能存多少个汉字?
  11. 基于国产全志A40I的机器人示教器解决方案
  12. 参考平面及其高度_遥感影像中建筑物平面及高度信息提取方法
  13. ssms 连接 oracle,【SQL】用SSMS连接Oracle手记
  14. endl与\n的区别
  15. jenkins 下载插件失败处理办法
  16. 【五】 C语言基础知识学习回顾 | 一篇搞定C语言基础 | 内附详细代码以及注释
  17. linux chrome 硬件加速,在Chrome上开启硬件加速和预先渲染的方法技巧
  18. OpenMP中的Reduction操作 #pragma omp xxx reduction()
  19. 弘辽科技:如何查看淘宝直通车排名?对手竞价怎么看?
  20. 微型计算机实验报告,微型计算机实验报告1

热门文章

  1. 远程桌面无法复制文本时解决办法
  2. geopy 在python中的使用
  3. python的hashlib库
  4. StrutsPreparedAndExcuteFilter与Interceptor
  5. 洛谷1231 教辅的组成
  6. autocad.net中判断当前被激活的空间
  7. 分享一个javascript alert精简框架
  8. [导入]对iis写权限的利用
  9. 压力测试和负载测试区别_如何理解与区分软件性能测试、负载测试、稳定性测试、压力测试...
  10. mysql主从数据库设计_mysql数据库主从库镜像原理及配置