是否可以扩展符合协议的结构?

时间:2019-02-26 16:25:13

标签: swift generics

我正在使用SwiftCheck进行基于属性的测试,我想为几个符合id | patient_id | vaccine_id | took_all_vaccines | date_received | comment ----------------------------------------------------------------------------- 1 | 1 | 1 | null | 2019-01-01 | Lorem ipsum dolor set ----------------------------------------------------------------------------- 2 | 1 | 2 | null | 2019-01-12 | Lorem ipsum dolor set ----------------------------------------------------------------------------- 3 | 2 | null | 1 | 2018-09-21 | Lorem ipsum dolor set 协议的enum生成随机元素。我认为,与其为所有CaseIterable编写相同的代码,我可以做以下事情:

enum

由于多种原因,该编译失败,主要原因是

extension Any: Arbitrary where Self: CaseIterable {
    public static var arbitrary: Gen<Self> {
        return Gen<Self>.fromElements(of: Self.allCases)
    }
}

有什么办法可以在Swift中表达出来吗?

1 个答案:

答案 0 :(得分:3)

如果该计算的属性应该存在于符合CaseIterable的所有类型上,则可以简单地扩展extension Arbitrary where Self: CaseIterable { public static var arbitrary: Gen<Self> { return Gen<Self>.fromElements(of: Array(Self.allCases)) } } 本身。

http://localhost/site/index.php/india