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コード)

関連記事

20140905-180905.jpg

英語苦手な人がSwiftを学びたいならこの本を読むといいよ!

アップルのWWDC2014で発表された、iOSおよびOS Xのためのプログラミング言語「Swift」

記事を読む

I20160525-233821.jpg

SwiftBondを使ってみた。observeやObservableの使い方など

Swiftバインディングフレームワークである「SwiftBond」を使ってみました!

記事を読む

I20160130-110811.jpg

【解決】Redundant conformance of ‘NSDate’ to protocol ‘Comparable’エラーが出た時の対処方法

アプリ開発中に「Redundant conformance of 'NSDate' to pro

記事を読む

I20160925-163452.jpg

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

UITabBarControllerで、タブバーアイコン非選択時の色を変更する方法を紹介します!

記事を読む

I20160204-120840.jpg

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

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

記事を読む

I20160129-115948.jpg

【対処法】Swift 2(iOS 9)ではUITextFieldのtextがString?になっている

Swift 1(iOS 8)時代において、UITextFieldのtextプロパティは va

記事を読む

I20160207-111059.jpg

【Swift】Xcodeで型推論された変数や定数の型を調べる方法

Swiftには、そのデータ型が明らかであれば型を明記する必要が無い「型推論」という機能があります

記事を読む

I20150714-010114.jpg

【Swift】Objective-Cで書いたクラスをメソッド単位で少しずつSwiftへ移行する方法

Objective-Cで作った既存のアプリをSwiftで書き直したいと思っているのですが、一

記事を読む

I20160124-111228.jpg

初心者がデザインを勉強するなら、まずこの本を読むといいかも

まず僕のスペックから話をすると、 アプリのコードを書いたり、ブログを書いたりしている

記事を読む

I20150924-010943.jpg

Swift 2.0で追加されたOptionSetTypeがなかなか便利

Swift 2.0で追加されたOptionSetTypeプロトコルがなかなか便利なので紹介し

記事を読む

【Mac】macOSのメール(Mail.app)でGmailをサクサク快適に使う方法

macOSに搭載されているメールアプリ、いわゆるMail.ap

【メンズネイル】新宿区大久保のネイルサロンで紫とピンクのネイルにしてもらった

2016年11月12日、東京都新宿区大久保にあるネイルサロン「

[Xcode][Swift]ボタンなどの同時タップを禁止する

iOSで、ボタンなどの同時タップを禁止する方法を紹介します。

【HomeKit】家の照明をSiriで制御できるようにしてみた

Apple製品と家電を連携するシステム「HomeKit(ホーム

【メンズネイル】新宿区大久保のサロンでターコイズとピンクのメタルネイルにしてもらった

2016年10月22日、いつもお世話になっているネイルサロン「

→もっと見る

PAGE TOP ↑