2016-07-28 7 views
2

"showListenerDidReceiveNotification:"という関連セレクタを使用して "showPhotoForMoodNotification"という名前の通知オブザーバを作成するSKSceneがあります。セレクタの使い方:Swfitで例外をスローする関数付き

eventListenerDidReceiveNotificationは、次のように投げると例外できる関数として宣言されます。

func eventListenerDidReceiveNotification(notif:NSNotification) throws { } 

しかし、私は「通知がSKSceneによって受信された場合、コンパイラはこの署名を関連付けないことに気づきましたthisL

NSNotificationCenter.defaultCenter().addObserver(self, selector: "eventListenerDidReceiveNotification:", name: "showPhotoForMoodNotification", object: nil) 

私が取得エラーのように見えると呼ばaddObserverでセレクタ 『eventListenerDidReceiveNotification」のシグネチャを持つメソッドは、』これです: enter image description here

私の推測では、メソッドのシグネチャの「スロー」部分が、nsnotificationの「addObserver」コールの「セレクタ」部分と互換性がないということです。なぜなら、「throws」部分を「eventListenerDidReceiveNotification "メソッドの宣言、物事は動作します。

このメソッドを例外をスローするメソッドとして説明するには、addObserverの「セレクタ」部分に何かを追加する必要がありますか?

おかげ

答えて

0

可能な答えhere。ちなみに、Swift 2.2(実際には、あなたが使っているバージョンがわかりません)には、お勧めの方法はnew syntax for selectorsです。

override func viewDidLoad() { 
    super.viewDidLoad() 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(test(_:)), name: "TestNotification", object: nil) 
} 

@objc private func test(notification: NSNotification) throws { 
    print("notification") 
} 

@IBAction private func fireNotification() { 
    NSNotificationCenter.defaultCenter().postNotificationName("TestNotification", object: nil) 
} 
0

IIRC、

func f(x: T) throws -> U 

ようスウィフト方法は次のように客観Cで表示されています。実は、私はちょうどこのコードをテストし、それが働いた

を(IBActionは、ストーリーボードでボタンTouchUpInsideイベントに接続されています)

- (nullable U *)fWithX:(T *)x error:(NSError **)errorPtr; 

だから、あなたのセレクターの0の部分。

EDIT:

そして

func f() throws -> U 

- (nullable U *)fAndReturnError:(NSError **)errorPtr; 
になり
関連する問題