【2024年4月】弊社では、基本リモートワークで一緒に成長してくださるメンバーを広く募集させていただいております。 詳細はこちら

【Swift】Static変数を活用してアプリ内で共有するシングルトン(一意)なデータを作成する方法とその使い方を徹底解説!

【Swift】Static変数を活用してアプリ内で共有するシングルトン(一意)なデータを作成する方法とその使い方を徹底解説!
ふくしま

こんにちは!株式会社メモリアインクのふくしまです!

この記事では、Static変数を用いたシングルトンパターンの実装方法とその使い方を詳しく解説します。この手法をマスターすることで、アプリケーション内で一意なデータを効率的に管理することが可能になります。

この記事を読んで分かること…
・シングルトンパターンとは何か
・Static変数の役割
・シングルトンなデータを作成する方法
・作成したデータの使い方

目次

シングルトンパターンの基本

シングルトンパターン(Singleton Pattern)は、アプリケーション内においてクラスのインスタンスが一つしか存在しないことを保証するデザインパターンです。これにより、グローバルなアクセスポイントを提供しつつ、インスタンスの重複を防ぐことができます。

Static変数の役割

Static変数(静的変数)は、クラスのインスタンス間で共有される変数です。Static変数を使用することで、どのインスタンスからもアクセス可能な共有データを作成することができます。

シングルトンパターンの実装

概要

テキストフィールドで入力した文字を、シングルトンパターンで作成した変数に格納し、次の画面で格納したアプリ内全体で共有する変数を利用して画面内にその文字を表示する実装を例にサンプルコードを示しつつ詳しく解説します。
実際の開発では例えば以下のような場面で利用されます。

  • アプリケーション全体で共有する設定(例えば、ユーザー設定、環境設定)を管理する場合
  • データベースへの接続インスタンスをアプリケーション全体で一つだけ保持し、共有する場合
  • ネットワーク通信を行うためのクラス(例えば、APIクライアント)

UI設計

ViewController(遷移元の画面)

・シングルトンな文字を入力するためのUITextField
・入力した文字列を送信して次の画面へ遷移するためのボタンUIButton
・Editor→Embed In→Navigation ControllerでNavigationControllerを継承

【Swift】Static変数を活用してアプリ内で共有するシングルトン(一意)なデータを作成する方法とその使い方を徹底解説!

SecondViewController(遷移先の画面)

・シングルトンな文字を表示するためのUILabel

【Swift】Static変数を活用してアプリ内で共有するシングルトン(一意)なデータを作成する方法とその使い方を徹底解説!

シングルトンパターンクラスの実装

シングルトンパターンを定義するためのDataManagerクラスのファイルを作成。
(File→New→File→Swift File)

サンプルコード

import Foundation
class DataManager {
    static let shared = DataManager()
    var userInfo: String? // 共有したいデータ

    private init() {} // 外部からのインスタンス化を防ぐ
}

サンプルコードの説明

3行目:DataManagerクラスの唯一のインスタンスを生成し、sharedという名前のstatic(静的)プロパティに格納しています。staticキーワードにより、このプロパティはクラス自体に属することになり、クラスのどのインスタンスからも共通の値を持つことになります。この行がシングルトンパターンの核心部分であり、DataManagerクラスのインスタンスがアプリケーション内に一つだけ存在することを保証します。
4行目:userInfoという名前の変数(プロパティ)を定義しています。このプロパティはオプショナル型のString(String?)で、ユーザー情報などアプリケーション内で共有したいデータを保持するために使用します。オプショナル型を使用しているのは、このプロパティが初期状態では値を持たない(nil)可能性があるためです。
6行目:DataManagerクラスのイニシャライザ(コンストラクタ)をprivateとして定義しています。これにより、このクラスは外部から直接インスタンス化することができなくなり、sharedプロパティ経由でのみアクセス可能な唯一のインスタンスを保持することができます。この仕組みにより、シングルトンパターンの実装が完成します。

ViewControllerの実装

サンプルコード

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var textField: UITextField!
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    @IBAction func saveButtonTapped(_ sender: UIButton) {
        if let nextVC = storyboard?.instantiateViewController(withIdentifier: "second") as? SecondViewController {
            navigationController?.pushViewController(nextVC, animated: true)
            DataManager.shared.userInfo = textField.text
            self.textField.text = ""
        }
    }
}

サンプルコードの説明

9-10行目:SecondViewController に遷移する処理
11行目:シングルトンオブジェクトDataManager.shareduserInfoプロパティにテキストフィールドのテキストを設定しています。これにより、アプリケーションの異なる部分で共有データを設定しています。
12行目:テキストフィールドのテキストを空文字に設定しています。これにより、ユーザーがデータを保存した後にテキストフィールドをクリアしています。

SecondViewControllerの実装

サンプルコード

import UIKit

class SecondViewController: UIViewController {
    @IBOutlet weak var dataLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        dataLabel.text = DataManager.shared.userInfo
    }
}

サンプルコードの説明

8行目:DataManagerシングルトンのsharedインスタンスが持つuserInfoプロパティの値を、dataLabelのテキストプロパティに代入しています。これにより、前のViewControllerで設定されたユーザー情報が、このViewControllerのラベルに表示されます。

動作確認

ふくしま

それではビルドして動作確認してみましょう!

【Swift】Static変数を活用してアプリ内で共有するシングルトン(一意)なデータを作成する方法とその使い方を徹底解説!

まとめ

いかがでしたか?
本記事では、Static変数を活用してシングルトンパターンを実装する方法について詳しく解説しました。シングルトンパターンを理解し、適切に使いこなすことで、アプリケーション内でのデータ共有がより効率的で安全になります。
この記事が皆様のお役に立てると幸いです!

ふくしま

この記事があなたのスキルアップに役立ったなら、次のキャリアステップを踏み出す絶好の機会かもしれません。エンジニアとしてのさらなる成長と挑戦を求めるなら、
未経験からIT・Webエンジニアを目指すなら【ユニゾンキャリア】
をオススメします!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次