gpt4 book ai didi

swift - 美元符号在 Swift/SwiftUI 中起什么作用?

转载 作者:行者123 更新时间:2023-12-02 11:37:41 25 4
gpt4 key购买 nike

This tutorial by Apple about SwiftUI使用美元符号绑定(bind)数据,但我无法在 SwiftUI 中找到有关此数据绑定(bind)的更多信息。

Toggle(isOn: $showFavoritesOnly) {

You use the $ prefix to access a binding to a state variable, or one of its properties.

这是某种inout 类型参数吗?它使用 & 符号来传递它。

最佳答案

WWDC 2019 视频 415 对此进行了很好的解释。您只是看到了广泛语言功能的一个特殊情况,即属性包装器。

属性包装器(例如 @State )实际上是引用具有相同名称(例如 State)的类型(通常是结构体或枚举)实例的一种方式。后者提供了将此实例属性转换为计算属性的指令,其 getter 和 setter 是其自身的某个计算属性(其 wrappedValue )的 getter 和 setter。它通常还拥有支持该计算属性的私有(private)存储。

因此,声明之后

@State var showFavoritesOnly = true

... showFavoritesOnly转换为计算属性,其 getter 和 setter 由 State 结构提供。当您设置showFavoritesOnly时为 true,即通过 State 结构体的 setter 进行路由,并最终到达 State 实例的存储属性中。

所有这些都意味着某个地方有一个与您的 showFavoritesOnly 关联的 State 实例。 。确实有,但它被隐藏起来了。如果您想查看 State 实例,它的名称是 _showFavoritesOnly .

好吧,但是当你说$showFavoritesOnly时,您没有获得 State 结构;你得到一个 Binding 结构。为什么?这是因为属性包装器有一种机制用于指定 $ 返回的值。名字应该是。对于State,它指定该值应该是它自己的binding属性,它是一个 Binding (请参阅文档: https://developer.apple.com/documentation/swiftui/state )。

出于一个惊人的巧合,Toggle 的 isOn初始化器采用一个 Binding (再次参见文档 https://developer.apple.com/documentation/swiftui/toggle/3232112-init )。您无法设置切换的 isOnshowFavoritesOnly即使你愿意!相反,您将其设置为 Binding<Bool>由 State 实例提供,以便 Toggle 与 State 对象自动进行双向通信。 SwiftUI 框架强制执行其自身的正确用法; Toggle 只能存在于某种绑定(bind)中,该绑定(bind)充当其开/关状态的基本事实来源。而且因为它是一个绑定(bind),而不仅仅是一个 Bool,所以通信是双向的:当用户点击 Toggle 中的开关时,值的变化通过绑定(bind)“向上”流向 State 变量。

关于swift - 美元符号在 Swift/SwiftUI 中起什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56551131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com