.red
とかやるためのものだった気がする、違うっけprotocol ColorStyle { typealias Member = StaticMember<Self> } extension StaticMember where Base : ColorStyle { static var red: RedStyle.Member { return .init(.init()) } static var blue: BlueStyle.Member { return .init(.init()) } } extension View { func colorStyle<S : ColorStyle>(_ style: S.Member) -> some View { ... } } MyView().colorStyle(.red) MyView().colorStyle(.blue)
<S: ColorStyle>
に対して、 (_ s: S)
と (_ s: S.Member)
の両方をオーバーロードしておかないといけないことだけど