swift - 是否可以扩展符合协议的结构?
问题描述
我正在使用SwiftCheck进行基于属性的测试,并且我想为几个enum
符合CaseIterable
协议的 s 生成随机元素。我认为与其为所有enum
s 编写相同的代码,不如执行以下操作:
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))
}
}
推荐阅读
- bash - 在 bash 脚本别名中使用函数参数
- android - 如何使用 Span 使 TextView Bold 的一部分直到特殊字符?
- abbyy - ABBYY FlexiCapture 12 api - 将项目上传到服务器的问题
- javascript - 如何使用 javascript 收听页面中的所有用户输入?
- excel - 从头开始创建 XLSX .rels .rels 文件无法正常工作?
- sql-server - 如何用斧头长度排除 x 值
- php - 类别循环显示所有帖子标题(WordPress)
- python - 是否可以在 QtDesigner 中设置 QApplication 样式?
- computer-vision - 在 YOLACT/YOLACT++ 中获取预测输出掩码的多边形坐标
- python - typeError:需要一个类似字节的对象,而不是 Python 3 中的“str”