问了gpt,答案粘贴一下 Swift中,Comparable是一个标准库提供的协议,它的所有成员变量或方法都是类比、结构、枚举等类型可以实现的。Swift强调类型安全,不能直接将它作为属性的类型,因为Comparable定制的方法需要明确类型才可以比较。
而Any在Swift中是一种特殊的类型,它可以表示任何类型的实例,包括函数类型。所以当你在属性前加上AnyComparable,你实际上是创建了一个可以存储任何遵守Comparable协议的对象的属性。
而对于自定义协议,如果它没有用到关联类型、Self限制等高级特性,那么它是可以直接作为属性类型的。这是因为自定义协议普通的使用场景下,更多的是明确的类型约束,不需要Any这样的泛型构造。但如果自定义协议使用了关联类型等特性,那么也是需要使用Any封装的。