首页 > 其他分享 >swiftUI-@Bindable和@Binging的作用

swiftUI-@Bindable和@Binging的作用

时间:2024-08-25 09:04:42浏览次数:8  
标签:Binding 视图 isOn swiftUI user var Bindable View Binging

在 SwiftUI 中,@Bindable@Binding 是用于管理和传递数据的属性包装器。它们在 SwiftUI 的数据流和状态管理中起着重要作用。

@Binding

@Binding 是一个属性包装器,用于在父视图和子视图之间共享数据。它允许子视图读取和写入父视图的状态,而不需要直接持有该状态的所有权。@Binding 通常用于在子视图中修改父视图的状态。

示例

import SwiftUI

struct ParentView: View {
    @State private var isOn: Bool = false

    var body: some View {
        VStack {
            Toggle("Switch", isOn: $isOn)
            ChildView(isOn: $isOn)
        }
    }
}

struct ChildView: View {
    @Binding var isOn: Bool

    var body: some View {
        Toggle("Child Switch", isOn: $isOn)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ParentView()
    }
}

在这个示例中,ParentView 持有一个 @State 属性 isOn,并通过 $isOn 将其绑定传递给 ChildViewChildView 使用 @Binding 属性包装器来接收这个绑定,并可以在其内部修改 isOn 的值。

@Bindable

@Bindable 是一个较新的属性包装器,通常用于简化和增强 @Binding 的功能。它允许你将整个对象作为绑定传递,而不仅仅是单个属性。这在需要传递多个绑定属性时特别有用。

示例

假设我们有一个模型类 User,并希望在视图中绑定多个属性:

import SwiftUI

class User: ObservableObject {
    @Published var name: String = ""
    @Published var age: Int = 0
}

struct ParentView: View {
    @StateObject private var user = User()

    var body: some View {
        VStack {
            TextField("Name", text: $user.name)
            Stepper("Age: \(user.age)", value: $user.age)
            ChildView(user: user)
        }
    }
}

struct ChildView: View {
    @Bindable var user: User

    var body: some View {
        VStack {
            TextField("Child Name", text: $user.name)
            Stepper("Child Age: \(user.age)", value: $user.age)
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ParentView()
    }
}

在这个示例中,ParentView 持有一个 @StateObject 属性 user,并将其传递给 ChildViewChildView 使用 @Bindable 属性包装器来接收整个 User 对象,并可以在其内部绑定和修改 User 的多个属性。

总结

  • @Binding:用于在父视图和子视图之间共享单个属性的绑定。
  • @Bindable:用于在视图之间共享整个对象的绑定,简化了多个属性的绑定传递。

通过使用 @Binding@Bindable,你可以在 SwiftUI 中更灵活地管理和传递数据,从而实现更复杂的用户界面和交互。

标签:Binding,视图,isOn,swiftUI,user,var,Bindable,View,Binging
From: https://www.cnblogs.com/Aliancn/p/18378652

相关文章

  • 如何使用 SwiftUI 中 ScrollView 的滚动偏移
    文章目录前言使用scrollPosition新的ScrollPosition类型为滚动添加动画滚动到特定项目滚动到特定偏移读取滚动位置总结前言WWDC24已经结束,我决定开始写一些关于SwiftUI框架即将推出的新特性的文章。今年,苹果继续填补空白,引入了对滚动位置更细粒度的控制。......
  • SwiftUI中全局EnvironmentObject的使用和注意事项,实现多界面共享数据
    SwiftUI的@EnvironmentObject是一个强大的工具,它允许你在多个视图之间共享数据(使用一个可观察对象)。当你有一个复杂的视图层次结构,并且需要在没有直接连接的视图之间共享相同的可观察对象时,它特别有用。创建ObservableObject协议类要使用环境对象,首先需要创建一个符合Obse......
  • swiftui中使用scaleEffect和rotationEffect实现缩放和旋转效果
    在SwiftUI中,你可以使用.scaleEffect()和.rotationEffect()来实现缩放和旋转动画,缩放和旋转的内容可以是图片,文字等view视图。scaleEffect可以实现缩放效果,配合动画可以实现好看的过度效果,其中的参数是缩放的倍数,1表示原本大小,大于1表示放大,小于1表示缩小。示例代码:Text("He......
  • SwiftUI Release 引入的辅助焦点管理
    文章目录前言使用@FocusState属性包装器高级技巧:专用辅助技术可聚焦字段的高级用法优化体验运行截图总结前言SwiftUIRelease引入了强大的新功能,其中之一是辅助焦点管理。这个新功能使得在SwiftUI中处理辅助技术(如VoiceOver和SwitchControl)的焦点状态变得......
  • 如何在 SwiftUI 中熟练使用 visualEffect 修饰符
    文章目录前言介绍visualEffect什么是视觉效果?visualEffect修饰符视觉效果完整的代码总结前言在WWDC23中,SwiftUI引入了一个名为visualEffect的新视图修饰符。此修饰符允许我们通过访问特定视图的布局信息来附加一组可动画化的视觉效果。下面我们将学习如何......
  • 在 SwiftUI 中的作用域动画
    文章目录前言简单示例动画视图修饰符使用多个可动画属性使用ViewBuilder总结前言从一开始,动画就是SwiftUI最强大的功能之一。你可以在SwiftUI中快速构建流畅的动画。唯一的缺点是每当我们需要运行多步动画或将动画范围限定到视图层次结构的特定部分时,我们如......
  • swiftUI
    SwiftUI是苹果推出的一种现代化方式,用于创建跨所有Apple平台的用户界面。它通过声明性语法简化了UI的开发流程。下面是一个基本的SwiftUI示例,展示了如何使用SwiftUI构建一个简单的"HelloWorld"应用。示例步骤1.创建一个新的SwiftUI项目打开Xcode,选择"新建项目......
  • swiftui中TabView使用,以及Tab使用注意
    TabView官方文档:TabView|AppleDeveloperDocumentationTab官网文档:Tab|AppleDeveloperDocumentation使用交互式用户界面元素在多个子视图之间切换的视图。也就是手机底部的几个导航菜单一样,但是注意官方给的例子里面有使用Tab组件的,但是这个Tab组件注意:暂时只支持bet......
  • SwiftUI 热门开源库推荐第1期 - 凡人程序猿 - iOS开发
    大家好,周末给大家分享几个我在用已久的GitHub开源库,这些开源库使用简单,功能强大,使用好它们能够为我们节省大量的开发时间。话不多说,直接上库。1、PopupViewgithub项目地址:https://github.com/exyte/PopupView这个开源库在GitHub上有3.2K个赞。它是一款功能全面且好用......
  • swiftUI使用VideoPlayer和AVPlayer播放视频
    使用VideoPlayer包播放视频:https://github.com/wxxsw/VideoPlayer提供一些可供测试的视频链接,不保证稳定可用哦:https://vfx.mtime.cn/Video/2019/06/15/mp4/190615103827358781.mp4https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4https://vfx.mtime.cn/Video/2019/......