post Image
`typealias My` をススメようと思ったけどやめた件 あるいはstatic methodをどうやって呼ぶか

staticメソッドの呼び方パターン洗い上げ

class Hoge {
    typealias My = Hoge

    func instanceMethod() {
        // インスタンスメソッドからstaticメソッドを呼ぶとき

        // (1) 一番プレーンなやり方。⭕️わかりやすい ❌️型名の変化に弱い
        Hoge.staticMethod()

        // (2) Swiftyなやり方。⭕️標準的かつ変化に強い ❌️ちょっと長いし、インスタンスメソッドでしか使えない
        type(of: self).staticMethod()

        // (3) typealiasを使ったやり方。⭕️読みやすい ❌️オレオレ
        My.staticMethod()
    }

    static func staticMethod() {
        // staticメソッドからstaticメソッドを呼ぶとき

        // (1) 型名は省略できる。 ⭕️シンプル ❌️static methodだとわかりにくいかも?
        anotherStaticMethod()

        // (2) selfつけることもできる。 ⭕️良い点はないかな ❌️尚更static methodだとわかりにくい
        self.anotherStaticMethod()

        // (3) 型名つけることもできる。 ⭕️インスタンスメソッドと同じように書けて統一性がある ❌️型名の変化に弱い
        Hoge.anotherStaticMethod()

        // (番外) これはできない。 ❗️Type 'Hoge.Type' has no member 'anotherStaticMethod'
//        type(of: self).anotherStaticMethod()

        // (4) typealiasも使える。 ⭕️インスタンスメソッドでのやり方と同じで統一性がある ❌️オレオレ
        My.anotherStaticMethod()
    }

    private static func anotherStaticMethod() {
    }
}

typealias My の良さ

  • インスタンスメソッド・staticメソッドでの統一性があるやり方
  • 読みやすい

ってことで、オレオレなやり方ではあるけど、 typealias My いいんじゃないのって思うんですけど。どうでしょう。
でもやってる例みたことないんで、デファクトスタンダード取れるように流行れー。

と思ったけど (15:04追記)

コメント欄でのやりとりで意見変わりました。

https://github.com/apple/swift-evolution/blob/master/proposals/0068-universal-self.md

Swift Evolutionで、 Self で呼べるようプロポーザルが出て、既にAcceptされていた。
将来的なことを考えると、 My よりも `Self` にするのがよさそうです。


『 Swift 』Article List