[Swift/SwiftUI]シングルトンクラスの実装

目次

概要

Singletonという実装の方法がある。
これは非常に便利で、あらゆるところから同じものにアクセスができるというもの。
これは他の言語を勉強するときも使える。
まずはソースコードから記載。

ソースコード

Viewクラス

TestView.swift
import SwiftUI

struct TestView: View {
    var body: some View {
        VStack {
        }
        .onAppear {
            SingleManager.shared.inputText = "testtest"
            SingleManager.shared.testMethod()
        }
    }
}
Swift

シングルトンクラス

SingleManager.swift
import Foundation

class SingleManager {
    static let shared = SingleManager()
    
    var inputText: String = ""
    
    private init() {
        
    }
    
    func testMethod() {
        print("呼ばれてますよ")
        print(inputText)
    }
}
Swift

詳細

シングルトンクラスの作り方

  • 他のクラスからアクセスできる静的変数を用意。
    (要は、staticな変数で一般的に「shared」が使われる)
  • 上記の静的変数(今回は「shared」)は「let」「const」のように変更できないようにするか、if文を使用してオブジェクトが生成されていたらオブジェクトを生成する処理をはじく。
    (要は、オブジェクトの生成は一回だけしかできないようにする
  • インスタンスメソッドはprivateにする(今回のインスタンスメソッドは「init」)

同じ両親の元から生まれる子が別人であるように、
とあるクラスのオブジェクトを生成しても、1回目と2回目では同じものは作られない。
シングルトンクラスはどこから参照しても同じものを参照することができる。

シングルトンクラスのメリット

  • 使用するメモリが小さくなる(生成されるオブジェクトがただ一つのため)
  • あらゆるファイルから全く同じオブジェクトを使用することができる。(グローバル変数のように扱える)

グローバル変数との違い

  • オブジェクトの生成が一回だけしかできないということ

こうすることで、複数人で開発を行うことになってもオブジェクトの生成が行われることはなく、突如どこかで内容がリセットされることを回避できる。
個人的には、カプセル化できるというのが好きというのはあるけど、調べてみたらオブジェクト生成が一回だけ(インスタンス化が一回のみ)というのはというのが肝のよう。