Base
が値型だとオーバーヘッド大きそう。 struct Extension<Base> { let base: Base init (_ base: Base) { self.base = base } } protocol ExtensionCompatible { associatedtype Compatible static var ex: Extension<Compatible>.Type { get } var ex: Extension<Compatible> { get } } extension ExtensionCompatible { static var ex: Extension<Self>.Type { return Extension<Self>.self } var ex: Extension<Self> { return Extension(self) } }
https://qiita.com/motokiee/items/e8f07c11b88d692b2cc5UIColor.yamabuki
のように書いているExtensionを以下のようにオシャレに書くことができる、と...
var ex: Extension<Self> { return Extension(self) }