こんにちは!株式会社メモリアインクのふくしまです!
この記事では、Static変数を用いたシングルトンパターンの実装方法とその使い方を詳しく解説します。この手法をマスターすることで、アプリケーション内で一意なデータを効率的に管理することが可能になります。
この記事を読んで分かること…
・シングルトンパターンとは何か
・Static変数の役割
・シングルトンなデータを作成する方法
・作成したデータの使い方
シングルトンパターンの基本
シングルトンパターン(Singleton Pattern)は、アプリケーション内においてクラスのインスタンスが一つしか存在しないことを保証するデザインパターンです。これにより、グローバルなアクセスポイントを提供しつつ、インスタンスの重複を防ぐことができます。
Static変数の役割
Static変数(静的変数)は、クラスのインスタンス間で共有される変数です。Static変数を使用することで、どのインスタンスからもアクセス可能な共有データを作成することができます。
シングルトンパターンの実装
概要
テキストフィールドで入力した文字を、シングルトンパターンで作成した変数に格納し、次の画面で格納したアプリ内全体で共有する変数を利用して画面内にその文字を表示する実装を例にサンプルコードを示しつつ詳しく解説します。
実際の開発では例えば以下のような場面で利用されます。
- アプリケーション全体で共有する設定(例えば、ユーザー設定、環境設定)を管理する場合
- データベースへの接続インスタンスをアプリケーション全体で一つだけ保持し、共有する場合
- ネットワーク通信を行うためのクラス(例えば、APIクライアント)
UI設計
ViewController(遷移元の画面)
・シングルトンな文字を入力するためのUITextField
・入力した文字列を送信して次の画面へ遷移するためのボタンUIButton
・Editor→Embed In→Navigation ControllerでNavigationControllerを継承
SecondViewController(遷移先の画面)
・シングルトンな文字を表示するためのUILabel
シングルトンパターンクラスの実装
シングルトンパターンを定義するための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.shared
のuserInfo
プロパティにテキストフィールドのテキストを設定しています。これにより、アプリケーションの異なる部分で共有データを設定しています。
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のラベルに表示されます。
動作確認
それではビルドして動作確認してみましょう!
まとめ
いかがでしたか?
本記事では、Static変数を活用してシングルトンパターンを実装する方法について詳しく解説しました。シングルトンパターンを理解し、適切に使いこなすことで、アプリケーション内でのデータ共有がより効率的で安全になります。
この記事が皆様のお役に立てると幸いです!
この記事があなたのスキルアップに役立ったなら、次のキャリアステップを踏み出す絶好の機会かもしれません。エンジニアとしてのさらなる成長と挑戦を求めるなら、
未経験からIT・Webエンジニアを目指すなら【ユニゾンキャリア】
コメント