2016-04-22 12 views
0

Objective-Cコードから以下のMenuクラスを使用しようとすると、私はfoobar(またはaddItemWithName関数が利用できない間に(引数リストにSelector型を持たない他の関数)、目的関数-cファイルに自動生成されたswiftをチェックして、その関数がそこのMenuインターフェイスにリストされていません。どうすればこの作品を作れますか?Swiftクラスの "Selector"型の関数引数をObjective-Cに使用できないようにします

public class Menu : UIView { 
    public func foobar() { 
     // implementation 
    } 

    public func addItemWithName(itemName: String, target: AnyObject?, action: Selector?) { 
     // implementation 
    } 
} 
+0

プロジェクトをクリーンアップして再構築しようとしましたか? – AnthonyR

+0

新しいAPIを作成するときは、ターゲットとセレクタベースのコールバックを使用しないことを強くお勧めします。ブロック/クロージャを渡す方が良い。たとえば、現代的なアプローチについては、 'UIAlertController'と' UIAlertAction'を参照してください。 – Sulthan

+0

@スルタンアドバイスありがとう。私はどうやってやるのか見ていきます。問題のプロジェクトでは、目標は目標/行動を使用することであるので、私はそのことに固執するでしょう。しかし、閉鎖はもちろん面白いですし、私は将来も同様の状況でそれらを使いたいと思います。 –

答えて

5

問題のタイプは、それがSelector?だ、Selectorではありません。 SELはオブジェクト型ではないため、ObjCでOptional<Selector>を表すことはできません。

+0

もちろん、私はそれについて考えていたはずです。ありがとう!ただし、セレクタを安全にnullableにするにはどうすればよいですか?私はときどきNULLで送ることができるようにしたい(特別な場合)... –

+0

Swiftでヌルセレクタが 'セレクタ()'で作成されています。 –

+0

はい、引数がセレクタ(質問マークなし)と表示されている場合、NULLセレクタは受け入れられますか? –

関連する問題