无静态属性的Swift枚举为何能符合要求静态属性的协议?
为什么该枚举能遵守Unknownable协议并通过编译?
这是因为Swift针对枚举有特殊的隐式合成逻辑:
- 首先,
Unknownable协议要求遵守者提供一个静态只读属性unknown,类型为协议遵守者自身(Self)。 - 当我们定义的
Type枚举中存在一个名为unknown的case时,Swift编译器会自动帮我们合成符合协议要求的静态属性,等价于手动实现了:static var unknown: Type { .unknown } - 这个隐式生成的属性完全满足协议的要求,所以枚举不需要手动编写任何额外代码,就能自动遵守
Unknownable协议并通过编译。
内容的提问来源于stack exchange,提问作者Roman
相关产品推荐
相关产品推荐

