【Swift4】シングルトン(Singleton)を使用した共通データの受け渡し

2020年8月27日

Swift4でのシングルトン(Singleton)を使用した共通データの受け渡し方法をご紹介します。

もくじ

  1. シングルトンとは?
  2. シングルトンの作成方法
  3. シングルトンに共通のデータを持たせられるようにする方法
  4. シングルトンで持たせたプロパティに初期値をセットする方法

1. シングルトンとは?

wikiに書いてある「あるクラスのインスタンスが1つしか生成されないことを保証するデザインパターン」という説明どおりなのですが、より簡単に説明すると、

「一個インスタンス作ったらプロジェクト全体でその一個を使い回すプログラム技法」

ということです。

2. シングルトンの作成方法

import UIKit

class Singleton: NSObject {

    class var sharedInstance: Singleton {
        struct Static {
            static let instance : Singleton = Singleton()
        }
        return Static.instance
    }
    
}

Swift4でのシングルトンの作成方法はとても完結でさっぱりしていますね!

3. シングルトンに共通のデータを持たせられるようにする方法

import UIKit

class Singleton: NSObject {
    
    // ここにプロパティを追加する
    var num : Int!
    var str : String!

    class var sharedInstance: Singleton {
        struct Static {
            static let instance : Singleton = Singleton()
        }
        return Static.instance
    }
    
}

こちらも簡単でプロパティを持たせてあげればいいだけです!

override func viewDidLoad() {
    super.viewDidLoad()

    Singleton.sharedInstance.num = 1
    Singleton.sharedInstance.str = "あいうえお"
    
}

使用例としてはこのような感じです。

一番はじめに Singleton.sharedInstance と宣言した時点でインスタンスが作成され、以後Singleton.sharedInstanceと宣言しても同じインスタンスを使い続けています。

ですので、Singleton.sharedInstance.~~~というプロパティに受け渡したいデータの値を入れておけば、どこでもシングルトンによってデータの受け渡しが可能というわけです。

シングルトン便利ですね!

4. シングルトンで持たせたプロパティに初期値をセットする方法

import UIKit

class Singleton: NSObject {
    
    var num : Int!
    var str : String!
    
    // 初期値をセットするためのプロパティ
    var hoge : String!

    class var sharedInstance: Singleton {
        struct Static {
            static let instance : Singleton = Singleton()
        }
        return Static.instance
    }
    
    // インスタンスの初期化と同時にをプロパティに初期値をセットする
    private override init() {
        super.init()
        self.hoge = "初期化"
    }
    
}

シングルトンのプロパティに初期値をセットさせるにはinit()メソッドをオーバーライドして対応します。