Swift 中的可识别协议:class 与结构
Identifiable protocol in Swift: class vs struct
我正在使用 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 协议的结构和 class 都将失败并出现正确的错误 Type 'MyActivity' does not conform to protocol 'MytIdentifiable'
我很纳闷
正如 Identifiable
的 documentation 所述,它确实为 class 类型的 id
提供了默认实现。但是,struct
没有默认实现,因此您需要手动添加 属性。
我正在使用 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 协议的结构和 class 都将失败并出现正确的错误 Type 'MyActivity' does not conform to protocol 'MytIdentifiable'
我很纳闷
正如 Identifiable
的 documentation 所述,它确实为 class 类型的 id
提供了默认实现。但是,struct
没有默认实现,因此您需要手动添加 属性。