kateinoigakukunのブログ

思考垂れ流しObserver

Enumの生成を制限する

Discordで話題に上がってたやつ。遊んでたら見つけた。

tarunon - 2018/04/26 午後4時2分

Enumを生成勝手に出来ないようにする方法って無いですよね structはinitをpublicにしなければ勝手に生成出来ないけど

protocol extensionで同名のstatic funcを生やすとambiguousA.hogeの呼び出しができなくなる。

enum A {
    case hoge(String)
}

protocol AP {}
extension AP where Self == A {
    static var hoge: (String) -> Self {
        fatalError()
    }
}

extension A: AP {}

A.hoge("aa") // error: ambiguous use of 'hoge'