Takahiro Octopress Blog

-1から始める情弱プログラミング

Swift2.xでのシングルトンパターンとクラスメソッド / インスタンスメソッド

シングルトンを使用したクラスでクラスメソッドとインスタンスメソッドを定義する

本日は、

  • Swift2.xでのシングルトンパターンのクラスの定義の仕方
  • そのクラスにおけるクラスメソッドとインスタンスメソッドの定義の仕方
  • クラスメソッドとインスタンスメソッドの呼び出し方

について見ていきたいと思います。

シングルトンパターンのクラスの定義

まず、シングルトンパターンのクラスの定義の方法を見ていきましょう。
Swift1.2までとSwift2.xでは定義の仕方が異なります。
ここではSwift2.xの場合のみ書きます。

1
2
3
4
5
6
7
class SingletonSample:NSObject {
  // シングルトンパターンとして定義
  static let sharedInstance:SingletonSample = SingletonSample()
  
  private init() {
  }
}

インスタンスは1つしか作られないので、

  • 内容に変更がない変数ということでletを使用
  • SingletonSampleクラスにおける固有の値ということでstaticを使用
  • 外部クラスからインスタンス化することを防ぐためにprivateinitを定義

となっています。

シングルトンパターンのクラスを利用するときは、
SingletonSample.sharedInstanceでOKです。
これで1つのインスタンスを使い回すことができます。

インスタンスメソッドの定義

次にシングルトンパターンにおけるインスタンスメソッドの定義方法について見ていきましょう。
まずは、定義する側です。

1
2
3
4
5
6
7
8
class SingletonSample:NSObject {
  ...
  // インスタンスメソッドの定義
  func sampleInstanceMethod() {
      ...
  }
  ...
}

インスタンスメソッドを使うときは

1
SingletonSample.sharedInstance.sampleMethod()

という形で使うことができます。
SingletonSample.sharedInstanceで1つのインスタンスを使うことができるので、通常のクラスと使い方は同じですよね。

クラスメソッドの定義

最後にシングルトンパターンにおけるクラスメソッドの定義方法について見ていきましょう。
まずは、定義する側です。

1
2
3
4
5
6
7
8
class SingletonSample:NSObject {
  ...
  // クラスメソッドの定義
  class func sampleClassMethod() {
      ...
  }
  ...
}

クラスメソッドを使うときは

1
SingletonSample.sampleClassMethod()

という形で使うことができます。
クラスメソッドはクラスをインスタンス化する必要なく、利用できるメソッドなので、
SingletonSample.sharedInstanceとインスタンスを通して利用せずに、 クラス名+メソッド名 で利用できるんですね。

本日は簡単ですが、以上になります。

Comments