2016-04-11 5 views
2

ある静的メンバ変数を宣言する方法次のエラーを生成します:スウィフト:私はクラスすなわち</p> <pre><code>class MyViewController: UIViewController { @IBOutlet weak var title: UILabel! static var staticSelf:MyViewController </code></pre> <p>この宣言のオブジェクトに設定する静的変数を持つクラスを宣言しようとしているクラス

"class var declaration requires an initializer expression or getter/setter specifier". 

私はイニシャライザを追加する際にいくつかの試みを試みましたが、より多くのまたは異なるコンパイルエラーが発生しました。代わりに、私はエラーで言うようにgetter/setter指定子を追加しようとしましたが、これは実行時に無限ループに陥っています。私はいくつかのバージョンを試してみた、これは最新のものである:

class MyViewController: UIViewController { 

    @IBOutlet weak var title: UILabel! 

    static var staticSelf:MyViewController { 
    set (selfInstance) { 
     MyViewController.staticSelf = selfInstance 
    } 
    get { 
     return MyViewController.staticSelf 
    } 
    } 

    override func viewDidLoad() { 
    super.viewDidLoad() 
    MyViewController.staticSelf = self 
    } 
} 

setterメソッドの実装の最初の試みがstaticSelf = selfInstanceた、Xcodeはこれをエラーとしてフラグが立てられself.staticSelf = selfInstanceに自動修正し、それは、ANになりループを無限にするので、MyViewController.staticSelf = selfInstanceに変更しましたが、無限ループも作成されます。

私はこの設定を得るために何千ものことを試しましたが、目的のCで3秒で完了できました。今すぐSwiftにうんざりしています。

+0

あなたは 'そうですね非オプション – Sulthan

+0

にnil'を割り当てています。あなたはできました。 static var staticSelf:リスナー?= nil –

+0

@Woofbeans:Swiftでうんざりしないでください!一度あなたはそれのハングアップを得るそれは実際に素晴らしいです:) – Lasse

答えて

2

あなたは何か似たようなことをする。

class MyViewController: UIViewController { 
    static var staticSelf:MyViewController? 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     MyViewController.staticSelf = self 
    }  

    func somefunc() { 
    } 
} 

あなたが他の場所からアクセスする必要があります。

if let controller = MyViewController.staticSelf { 
    controller.somefunc() 
} 
1

あなたは宣言の行にすぐに値を代入する必要があります。

static var staticSelf = MyViewController() 

これはところで、あります。 Swiftでシングルトンを作成するための標準パターン。

8

基本的な例

class MyClass { 
    static var string: String 
} 

初期化されない変数がnil値を持っているので、動作しません。ただし、Swiftでは、任意の変数にのみnilを割り当てることができます。

あなたは2つのオプションがあります。

  1. はオプション

    static var string: String? 
    

    または

    static var string: String? = nil 
    
  2. として変数を宣言しますが、非nilの値で初期化します。

    static var string: String = "some value" 
    

あなたの目的は、ソリューションのための公式Apple guideを参照してください、その後、シングルトンを作成する場合:Objective-Cであなたがスウィフトに、nullになる可能性ポインタを使用していたと仮定すると、

class MyViewController: UIViewController { 
    static let staticSelf = MyViewController() 
} 
+0

シングルトンはプライベートイニシャライザを持っていないはずですか? – Darko

関連する問題

 関連する問題