You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift类遵循Identifiable无需id而结构体需实现id的理解是否正确

解答

你的理解完全正确,该编译表现差异由Swift标准库中Identifiable协议针对不同类型的默认实现规则导致:

  • 针对结构体、枚举等值类型:标准库没有提供Identifiable协议的默认适配,必须显式实现协议要求的全局唯一id属性才能满足合规要求,否则就会触发你看到的Type 'Bar' does not conform to protocol 'Identifiable'编译错误。
  • 针对类等引用类型:标准库为所有AnyObject类型(也就是所有Swift类)提供了Identifiable的默认扩展实现,该实现直接将实例的内存地址标识(ObjectIdentifier)作为id值,天然具备全局唯一性,因此不需要手动实现id属性即可符合协议要求,这就是Foo类无编译报错的原因。

对应复现代码如下:

struct Bar: Identifiable {
    // 编译报错:Type 'Bar' does not conform to protocol 'Identifiable'
    // 修复方案:显式添加唯一id属性,例如 let id = UUID()
}

class Foo: Identifiable {
    // 无编译报错,默认使用实例内存地址作为唯一id
}

补充说明:如果类中手动实现了id属性,会覆盖标准库提供的默认实现,业务逻辑中读取到的id会以自定义实现为准。

内容的提问来源于stack exchange,提问作者Mary Doe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 18:12:51