identified(by: \.self) - 它是做什么的?
identified(by: \.self) - what does it do?
在此视频中:https://developer.apple.com/videos/play/wwdc2019/103/,以下代码片段显示在 15:30 附近:
...
ForEach(ContentSizeCategory.common.identified(by: \.self))
...
它有什么作用? self
指向哪里?当前对象(TraitCell_Preview
)?它甚至无法在我的计算机中编译,因为 common
不是 ContentSizeCategory
中的成员。我以为我以前在 SwiftUI
演讲 (\.self
) 中见过它。不过 Keypath
并不是我在 Swift 中最好的东西。
我明白 ForEach
的元素需要是 Identifiable
。 self
(a.k.a。TraitCell_Preview
对吗?)只符合 PreviewProvider
而不是 Identifiable
(如果私有 _PreviewProvider
协议来自 PreviewProvider
符合不符合 Identifiable
,不确定,因为我看不到代码)。
代码片段中的 \.self
是什么,它指向哪里?
方法self
是一个属性即returns对象本身,例如:
let string = "text"
print(string[keyPath: \.self]) // "text"
我们在访问类型时也使用它,例如Int.self
.
我假设整个实例都用作标识符。
- 看起来
common
是他们为帮助演示而创建的 static
变量。它只是 ContentSizeCategory
的扩展。像这样:
extension ContentSizeCategory {
static var common = [ContentSizeCategory.accessibilityLarge,
ContentSizeCategory.accessibilityMedium,
ContentSizeCategory.extraSmall]
}
ContentSizeCategory
是一个枚举,符合 Hashable ,这意味着每个类型都是唯一可识别的。下面是 identified
函数的签名,当它被调用时你需要告诉它应该使用什么关键路径来唯一标识项目。所以 \.self
基本上是在告诉整个自我是唯一的,因为它符合 Hashable。
func identified<ID>(by getID: KeyPath<Binding<Value.Element>, ID>) -> IdentifierValuePairs<Binding<Value>, ID> where ID : Hashable
在此视频中:https://developer.apple.com/videos/play/wwdc2019/103/,以下代码片段显示在 15:30 附近:
...
ForEach(ContentSizeCategory.common.identified(by: \.self))
...
它有什么作用? self
指向哪里?当前对象(TraitCell_Preview
)?它甚至无法在我的计算机中编译,因为 common
不是 ContentSizeCategory
中的成员。我以为我以前在 SwiftUI
演讲 (\.self
) 中见过它。不过 Keypath
并不是我在 Swift 中最好的东西。
我明白 ForEach
的元素需要是 Identifiable
。 self
(a.k.a。TraitCell_Preview
对吗?)只符合 PreviewProvider
而不是 Identifiable
(如果私有 _PreviewProvider
协议来自 PreviewProvider
符合不符合 Identifiable
,不确定,因为我看不到代码)。
代码片段中的 \.self
是什么,它指向哪里?
方法self
是一个属性即returns对象本身,例如:
let string = "text"
print(string[keyPath: \.self]) // "text"
我们在访问类型时也使用它,例如Int.self
.
我假设整个实例都用作标识符。
- 看起来
common
是他们为帮助演示而创建的static
变量。它只是ContentSizeCategory
的扩展。像这样:
extension ContentSizeCategory {
static var common = [ContentSizeCategory.accessibilityLarge,
ContentSizeCategory.accessibilityMedium,
ContentSizeCategory.extraSmall]
}
ContentSizeCategory
是一个枚举,符合 Hashable ,这意味着每个类型都是唯一可识别的。下面是identified
函数的签名,当它被调用时你需要告诉它应该使用什么关键路径来唯一标识项目。所以\.self
基本上是在告诉整个自我是唯一的,因为它符合 Hashable。
func identified<ID>(by getID: KeyPath<Binding<Value.Element>, ID>) -> IdentifierValuePairs<Binding<Value>, ID> where ID : Hashable