Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 识别(由:\.self识别)-它做什么?_Swift_Swiftui_Keypaths - Fatal编程技术网

Swift 识别(由:\.self识别)-它做什么?

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

在这段视频中,15:30左右显示了以下代码片段:

...
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