Swift 2でシングルトンを初期化・呼び出しする方法

公開日: : 最終更新日:2016/02/10 iPhoneアプリ開発

20160118-223109.jpg

Swift 2でシングルトンを実装する方法について解説したいと思います!

(※「シングルトンを呼び出す」という言葉遣いには個人的に違和感を感じましたが、このキーワードで検索して調べる人がいるようなのでこのような記事タイトルとしてあります。)

    

スポンサード リンク

「シングルトン」とは?

シングルトンとは、そのクラスのインスタンスが1つしか無いことを保証するための設計パターンです。

詳しくはこちらのページなどを見てもらえればと思います。 ⇒ Singleton パターン – Wikipedia

    

シングルトンなクラスを作る

シングルトンなクラスを作るには、以下の様にコードを書きます。

// (1) 継承を禁止
final class Singleton {
    // (2) イニシャライザをprivateにする
    private init() {
        
    }
    
    // (3) 唯一のインスタンスをstaticとして用意
    static let sharedSingleton = Singleton()
}

    

(1) 継承を禁止する

(1)では、クラスにfinal指定を行うことによって継承を禁止します。

Singletonから継承しようとすると “Inheritance from a final class ‘Singleton'” というエラーが出ます。

20160118-221231.jpg

    

(2) 唯一のイニシャライザをprivateにする

(2)では、唯一のイニシャライザをprivateにします。これによってイニシャライザを使って外部からこのクラスのインスタンスを作ることができなくなります。

外部からイニシャライザを使ってインスタンスを作ろうとすると、”‘Singleton’ cannot be constructed because it has no accessible initializers” というエラーが出ます。

20160118-222152.jpg

    

(3) 唯一のインスタンスをstaticとして用意

(3)では、Singletonクラスの唯一のインスタンスをstaticとして用意します。これによってイニシャライザを使って外部からインスタンスを作成しなくても、唯一のインスタンスにアクセスできるようになります。

    

シングルトンなクラスのインスタンスにアクセスする方法

シングルトンなクラスのインスタンスにアクセスするには、以下のようにします。

Singleton.sharedSingleton

例えばSingletonクラスにnumというプロパティを用意した場合、

final class Singleton {
    private init() {
        
    }
    
    static let sharedSingleton = Singleton()
    
    var num : Int = 0
}

これにアクセスするには以下のようにします。

Singleton.sharedSingleton.num = 123

    

@akio0911はこう思った。

他に良い実装方法があれば、ぜひ教えて下さい!

Swift 2の文法について学ぶには、以下の本がオススメです!

この記事が気に入ったら「いいね!」しよう

follow us in feedly

Feedlyで最新記事を購読

Twitterで更新情報をゲット!

LINEでご感想・ご要望お送りください!
(スマホでLINEを起動 > 友だち追加 > QRコード)

関連記事

20160802-232454.jpg

【Xcode 7】メソッドがどこから呼びだされているかを調べる方法

Xcode 7で、メソッドがどこから呼び出されているのか調べる方法を紹介します!     方法

記事を読む

20150116-114410.jpg

プログラミング未経験者がSwiftの文法を学ぶのにオススメな本!「たのしいSwiftプログラミング」

楽しみにしていたSwiftの入門書「たのしいSwiftプログラミング」を読み終わったので、レビュ

記事を読む

20141225-223049.jpg

【Xcode6】Auto Layoutで制約のFirst ItemとSecond Itemを逆にする方法

一度追加した制約のFirst ItemとSecond Itemを入れ替える方法について紹介します

記事を読む

I20160217-170931.jpg

2016年2月15日以降、Missing iOS Distribution Signing identity for XXX というエラーが出た場合の解決方法

2016年2月15日以降、AppStoreへの申請やipaファイルのエクスポートで「Missin

記事を読む

I20160513-010707.jpg

Swiftで計算型プロパティをネストさせてみる

Swiftの計算型プロパティ(Computed property、コンピューテッドプロパティ)を

記事を読む

I20160201-112159.jpg

ライブラリ管理ツールCarthageのCartfileの書き方

iOS(Cocoa)ライブラリ管理ツール「Carthage」で使用するCartfileの書き方を

記事を読む

20150410-122409.jpg

複数バージョンのXcodeを共存してMacにインストールする方法

いよいよXcode 6.3が正式にリリースされましたね。 今回は複数バージョンのXco

記事を読む

I20160204-120840.jpg

Swiftでプロトコル型に対して===演算子を使いたい時の対処法

プロトコル型の変数や定数に対して===演算子を使うと「error: binary opera

記事を読む

20140810-193043.jpg

WordPressでObjective-Cのソースコードをキレイに整形して表示する方法

WordPressの記事内で、Objective-Cのソースコードをキレイに整形して表示する方法

記事を読む

I20151202-232710.jpg

【Swift 2】配列(Array)を初期化する方法

Swiftで配列(Array)を初期化する方法についてまとめてみたいと思います!   

記事を読む

20170423-182541
良肌研究室のフェイスウォッシュとオールインワンジェルを使ってみた

株式会社ブラシナさんから、良肌研究室の商品をご提供頂いたので、

I20170228-002742.jpg
約3ヶ月で体脂肪率を6.2%も落とせたキッカケについて

(右上の赤枠内がダイエット開始前、左下の赤枠内が3ヶ月後の数値

I20161224-174949.jpg
「季節の野菜を直接配送!季節のスムージー」を買ってみた

「FiNCモール」で、「季節の野菜を直接配送!季節のスムージー」を

I20161002-152537.jpg
【メンズネイル】東京・新宿のネイルサロンでマットネイルしてもらった

2016年7月18日、東京・新宿のメンズOKなネイルサロン「Tot

I20160925-163452.jpg
タブバーアイコン非選択時の色を変更する方法【iOS 10】

UITabBarControllerで、タブバーアイコン非選択時の

→もっと見る

PAGE TOP ↑