Avatar
enum Valid {} enum Invalid {} struct Configurable { let configuration: Configuration<Valid, Valid> } struct Configuration<FlagA, FlagB> { private var a: Int? func setFlagA(a: Int) -> Configuration<Valid, FlagB> { return Configuration<Valid, FlagB>(a: a, b: b) } private var b: String? func setFlagB(b: String) -> Configuration<FlagA, Valid> { return Configuration<FlagA, Valid>(a: a, b: b) } } func noConfiguration() -> Configuration<Invalid, Invalid> { return Configuration() } let configuration = noConfiguration() .setFlagA(a: 1) .setFlagB(b: "b") Configurable(configuration: configuration)
12:34 AM
一応あるていど期待通りなんですが、なんかイマイチ感があって。
12:35 AM
似たような感じの知られてる実装があったら知りたいと思いました。