【Swift】『static』キーワードの意味・便利な使い方
公開日:
static とは
static
キーワードは簡単にいうと
インスタンスではなく、クラス単位で参照できるプロパティやメソッドを定義できるキーワード
です。試しにコードを書いてみます。
サンプルコード
class Hoge {
// 普通のプロパティ
var normalProperty: String = "normalProperty"
// staticプロパティ
static var staticProperty: String = "staticProperty"
// 普通のメソッド
func normalMethod() {
print("normalMethod")
}
// staticメソッド
static func staticMethod() {
print("staticMethod")
}
}
print(Hoge.normalProperty) // error
print(Hoge.staticProperty) // "staticProperty"
// インスタンス化
let hoge = Hoge()
print(hoge.normalProperty) // "normalProperty"
print(hoge.staticProperty) // error
このように、
クラス内に定義したプロパティやメソッドはそのクラスをインスタンス化してから、インスタンスを通して使用します。
それに対してstatic
キーワードのついたプロパティやメソッドはインスタンスではなく、クラスに直接結びついています。
言い換えれば、インスタンス化しなくても使用できるプロパティやメソッドを定義できます。
static の良さ、使い所
static はわかったけどいつ使うん?
自分が、調べたりインターン先のソースコードを読んだ感じだと
- インスタンス化しなくてもいい
- 便利な関数をまとめることができる
の二つが挙げられるのではないかと思っています。
詳しくみていきましょう。
インスタンス化しなくてもいい
先ほど説明したように、static
がついているプロパティやメソッドはクラスをインスタンス化しなくても使用することができます。
すなわち、メモリを無駄に使用するミスを減らせます。
便利な関数をまとめることができる
これは自分がインターン先のアプリのソースコードを見ていて、一番納得した使い方です。
例えばアプリを作る中で、
Date
型からString
型に変換できるメソッドString
型からDate
型に変換できるメソッドDate
型の誕生日を引数に入れたら、Int
型の年齢が返ってくるメソッド
こんなメソッドたちが欲しいなって思ったとしましょう。
これはstatic
を使ってこのように書いて、呼び出すことができます。
class DateUtility {
// DateからStringに変換するstaticメソッド
static func dateToString(date: Date) -> String {
// 変換する処理
return "string"
}
// StringからDateに変換するstaticメソッド
static func stringToDate(stirng: String) -> Date {
// 変換する処理
return Date()
}
// 誕生日から年齢を返すstaticメソッド
static func ageFromBirthday(birthday: Date) -> Int {
// 年齢を計算する処理
return Int()
}
}
// 呼び出し
let today = DateUtility.dateToString(date: Date())
print(today)
関数の中の細かい処理は省略していますが、自分でDateUtility
クラスを作ることで Date
関連のよく使う関数をまとめることができそうです。
定義も呼び出しもわかりやすいですね。
メソッドを使いたいだけなので、インスタンス化する必要もなくstatic
メソッドが適していそうです。
まとめ
static
キーワードはクラスをインスタンス化しなくても、使用できるプロパティやメソッドを定義できる。
これは僕が調べたり、ソースコードを読んで学んだことなのでもっと便利な使い方や、もしかしたら間違いがあるかもしれません。
そういうことがあったら指摘していただけるとありがたいです。
では、Bye