是否有一种方法可以使自定义协议像标准Hashable、Equatable、Codable等传播,即当struct/class的所有属性都符合该协议时,struct/class本身就可以符合该协议。
假设我有这样一个简单的协议:
protocol State {
init()
}假设我有两个结构:
struct State1: State {}
struct State2: State {}它们符合协议,然后我想要另一个符合我的协议的struct,如下所示:
struct AppState: State { // error: Type 'AppState' does not conform to protocol 'State'
let state1: State1
let state2: State2
}理论上,如果所有属性都有一个空的init(),那么在AppState结构中隐式地实现init应该没有问题。但是编译器只理解AppState中的显式AppState。那么,有什么方法可以增强我的协议State来实现这个功能呢?
发布于 2022-03-24 20:48:29
不幸的是,不,这在Swift目前是没有意义的。协议的自动一致性目前仅限于直接在编译器中实现(例如,请参阅implementation for Codable和Equatable and Hashable);您能够连接到此机制的唯一方法是向编译器添加直接支持--如果您愿意分叉编译器并使用它编译所有代码,则是可行的,但这是一个很大的飞跃。
https://stackoverflow.com/questions/71609174
复制相似问题