The compiler will synthesize an implementation of ValueEnumerable for an enum type if and only if: - the enum contains only cases without associated values; - the enum is not @objc; - the enum has an explicit ValueEnumerable conformance (and does not fulfil the protocol's requirements).ValueEnumerable のときは生成で良い気が。 Codable が Codable なプロパティを持っている場合と同じように。Foo の ValueCollection が得られれば良いのでは?