LoginSignup
18
5

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-05-18

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追記)

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

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

18
5
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
5