Swift 识别(由:\.self识别)-它做什么?
在这段视频中,15:30左右显示了以下代码片段:Swift 识别(由:\.self识别)-它做什么?,swift,swiftui,keypaths,Swift,Swiftui,Keypaths,在这段视频中,15:30左右显示了以下代码片段: ... ForEach(ContentSizeCategory.common.identified(by: \.self)) ... 它有什么作用?self指向哪里?当前对象(TraitCell\u预览)?它甚至没有在我的计算机中编译,因为common不是ContentSizeCategory中的成员。我想我以前在一次SwiftUI谈话(\.self)中见过它密钥路径并不是我在Swift中的最佳选择 我理解,ForEach的元素需要是可识别的s
...
ForEach(ContentSizeCategory.common.identified(by: \.self))
...
它有什么作用?self
指向哪里?当前对象(TraitCell\u预览
)?它甚至没有在我的计算机中编译,因为common
不是ContentSizeCategory
中的成员。我想我以前在一次SwiftUI
谈话(\.self
)中见过它<不过,代码>密钥路径并不是我在Swift中的最佳选择
我理解,ForEach
的元素需要是可识别的self
(又称TraitCell\u Preview对吧?)只符合PreviewProvider
,因此不符合可识别的(如果PreviewProvider
所遵循的私有\u PreviewProvider
协议不符合可识别的,我不能确定,因为我看不到代码).
代码片段中的\.self
是什么?它指向哪里?方法self
是返回对象本身的属性,例如:
let string = "text"
print(string[keyPath: \.self]) // "text"
我们在访问类型时也使用它,例如Int.self
我假设整个实例被用作标识符
看起来common
是一个static
变量,他们创建该变量是为了帮助演示。它只是ContentSizeCategory
的一个扩展。大概是这样的:
ContentSizeCategory
是一个枚举,符合哈希表,这意味着每个类型都是唯一可识别的。下面是identified
函数的签名,调用该函数时,您需要告诉它应该使用什么关键路径来唯一地标识项目。因此,\.self
基本上是告诉整个自我是唯一的,因为它符合Hashable
func-identified(通过getID:KeyPath)->IdentifierValuePairs,其中ID:Hashable
那么这意味着该成员是可识别的?可惜它没有编译,所以我不能看一看myself@J.Doe这是一个枚举。这意味着这些值已经是唯一的,您不必提供任何其他唯一标识符。但是,既然我们不能真正编译,我现在就不担心这个问题了。当另一个问题比这个问题晚被问到时,这个问题被标记为重复的问题是毫无意义的。另一个链接问题应标记为重复问题。如果在Sulthan将您的问题设置为重复问题时,没有经过投票或接受的答案,他们不可能这样做。更多信息
extension ContentSizeCategory {
static var common = [ContentSizeCategory.accessibilityLarge,
ContentSizeCategory.accessibilityMedium,
ContentSizeCategory.extraSmall]
}
func identified<ID>(by getID: KeyPath<Binding<Value.Element>, ID>) -> IdentifierValuePairs<Binding<Value>, ID> where ID : Hashable