Swift中使Array遵循Storable协议的问题求助
解决Array遵循自定义Storable协议的兼容问题
问题根源
- 当你写
extension Array: Storable where Element: Storable时,它仅支持元素为具体Storable类型的数组(比如[String])。但[Storable]本质是[any Storable],这里的any Storable是存在类型,它本身并不遵循Storable协议,因此会触发Type 'any Storable' cannot conform to 'Storable'错误。 - 若改为
extension Array: Storable where Element == Storable,则仅匹配[any Storable]类型的数组,无法覆盖[String]这类具体元素的数组,导致'y()' requires the types 'String' and 'any Storable' be equivalent错误。
解决方案
同时添加两个扩展,分别覆盖两种场景:
protocol Storable { } extension String: Storable { } // 处理元素为具体Storable类型的数组 extension Array: Storable where Element: Storable { } // 处理元素为any Storable的数组 extension Array: Storable where Element == any Storable { }
这样修改后,[String]会匹配第一个扩展,[Storable](即[any Storable])会匹配第二个扩展,两种数组类型都能正确遵循Storable协议。
内容的提问来源于stack exchange,提问作者woodipw
相关产品推荐
相关产品推荐

