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`
にするのがよさそうです。