1

我正在使用 Swift 5.3

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

final class MyActivity: Identifiable {
    public let iHaveNoId: String = ""
}

它编译时没有任何错误(即使我没有实现“id”字段),而对于 struct

struct MyActivity: Identifiable {
    public let iHaveNoId: String = ""
}

我收到一个错误(如预期的那样) -类型“MyActivity”不符合协议“Identifiable”

此外,如果我复制 Identifiable 源代码并将其重命名为我自己的名字,例如

public protocol MyIdentifiable {
    associatedtype ID : Hashable
    var id: Self.ID { get }
}

那么实现 MyIdentifiable 协议的结构和类都将失败,并出现适当的错误类型“MyActivity”不符合协议“MytIdentifiable”

我很困惑。

4

1 回答 1

4

作为状态的文档,它确实为类类型Identifiable提供了默认实现。id但是,s 没有默认实现struct,因此您需要手动添加该属性。

于 2020-06-30T13:58:21.093 回答