Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.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中的可识别协议:类与结构_Swift_Identifiable - Fatal编程技术网

Swift中的可识别协议:类与结构

Swift中的可识别协议:类与结构,swift,identifiable,Swift,Identifiable,我用的是Swift 5.3 试图理解为什么我在声明这个结构时 final class MyActivity: Identifiable { public let iHaveNoId: String = "" } 即使我没有实现id字段,它编译时也不会出现任何错误,而对于struct struct MyActivity: Identifiable { public let iHaveNoId: String = "" } 我收到了预期的错

我用的是Swift 5.3

试图理解为什么我在声明这个结构时

final class MyActivity: Identifiable {
    public let iHaveNoId: String = ""
}
即使我没有实现id字段,它编译时也不会出现任何错误,而对于struct

struct MyActivity: Identifiable {
    public let iHaveNoId: String = ""
}
我收到了预期的错误-类型“MyActivity”不符合协议“Identified”

此外,如果我复制可识别的源代码并将其重命名为我自己的名称,例如

public protocol MyIdentifiable {
    associatedtype ID : Hashable
    var id: Self.ID { get }
}
然后,实现MyIdentifiable协议的结构和类都将失败,错误类型为“MyActivity”不符合协议“MyTiIdentifiable”


我感到困惑。

作为可识别状态的代表,它确实为类类型的id提供了默认实现。但是,结构没有默认实现,因此需要手动添加属性。

作为可识别状态的一部分,它确实为类类型的id提供了默认实现。但是,结构没有默认实现,因此您需要手动添加属性。

在发布答案前几分钟找到了它,但文档中没有明确说明结构没有默认实现。谢谢。@是的,它是:与自我相关的实体的稳定身份。当Self符合AnyObject时可用。在发布答案前几分钟找到它,但文档没有明确说明struct没有默认实现。谢谢。@是的,它是:与自我相关的实体的稳定身份。当Self符合任何对象时可用。