我正在使用SwiftCheck进行基于属性的测试,我想为符合 CaseIterable
协议(protocol)的几个 enum
生成随机元素。我认为,我可以执行如下操作,而不是为所有 enum
编写相同的代码:
extension Any: Arbitrary where Self: CaseIterable {
public static var arbitrary: Gen<Self> {
return Gen<Self>.fromElements(of: Self.allCases)
}
}
编译失败有几个原因,最主要的是
Error:(13, 1) non-nominal type 'Any' cannot be extended
有没有办法用 Swift 来表达这一点?
最佳答案
如果此计算属性应该存在于符合 CaseIterable
的所有类型上,您可以简单地扩展 CaseIterable
本身。
extension Arbitrary where Self: CaseIterable {
public static var arbitrary: Gen<Self> {
return Gen<Self>.fromElements(of: Array(Self.allCases))
}
}
关于swift - 是否可以扩展符合协议(protocol)的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54889980/