2016-10-25 6 views
0

のために働くこれがスウィフト2で働いていませんが、スウィフト3でエラーが発生し...シングルトンの実装は、もはやスウィフト3

class SomeClass { 

     var Role: Int 
     var Status: Bool 

     static let sharedClass = SomeClass() 

     private init(){ 
      Role = 3 
      Status = false 
     } 
    } 

    let shared = SomeClass() //error on this line -> SomeClass initializer is inaccesible due to private protection level 

私はinit()からprivateキーワードを削除することができますが、私はわかりませんそれがまだ適切なシングルトンの実装である場合。 Swift 3でこれを行う正しい方法は、誰が知っていますか?おかげ

答えて

1

このライン:

let shared = SomeClass() 

は、シングルトンを使用していません。それはSomeClassの新しいインスタンスを作成しようとしています。 initはプライベートなので失敗します。

あなたが欲しい:

let shared = SomeClass.sharedClass 

シングルトンを使用すること。

1

あなたはそれが全体のポイントだ、まったくSomeClass()を使用することになっていません:あなたのシングルトンは

SomeClass.sharedClass 

経由でのみアクセス可能であり、これはわざとです:同じインスタンスは異なる場所で共有して使用されています。

関連する問題