4

クラスにインスタンス変数として格納されているブロックがあります

typedef void ((^didSelectWord)(NSString* word));
@property (nonatomic,strong) didSelectWord wordSelected;

[UIView animateWithDuration と入力し、xcode がそのブロックをオートコンプリートするときのように、xcode がブロックを自動入力するようにします。

ブロックをオートコンプリートすると、ブロックがいっぱいになります

[self.suggestedSearchTermView setWordSelected:(didSelectWord)wordSelected

それ以外の

[self.suggestedSearchTermView setWordSelected:^(NSString *word) {

このブロックをオートコンプリートする方法を Xcode に理解させるために何かを変更することは可能ですか?

4

3 に答える 3

10

わかりました、いくつかのテストを行いました。

どうやら、2 つの (完璧とはほど遠い) オプションがあります。

  1. を避け、typedefプロパティを次のように宣言します。

    @property (nonatomic,strong) void (^wordSelected)(NSString * word);
    

    コメントに記載されているように、これにはオートコンプリートでパラメーター名をスキップするという欠点があります。

  2. インターフェイスにセッター宣言を明示的に追加します

    typedef void ((^DidSelectWordBlock)(NSString* word));
    
    @interface YourClass : NSObject
    
    @property (nonatomic,strong) DidSelectWordBlock wordSelected;
    - (void)setWordSelected:(DidSelectWordBlock)wordSelected;
    
    @end
    

    これにより、Xcode はセッター定義の前に型定義を解決し、期待どおりの優れたオートコンプリートを提供します。明らかな欠点は、インターフェイスでの余分な setter 宣言です。

とはいえ、バグレポートに記入する必要があります: http://openradar.appspot.com/

于 2013-08-28T11:28:06.603 に答える
2

typedef次のように、プロパティを なしで宣言します。

@property (nonatomic,strong) void (^wordSelected)(NSString *word);

この定義により、Xcode は以下の展開を提供します。

MyClass *test = [MyClass new];
[test setWordSelected:(void (^)(NSString *))wordSelected];
于 2013-08-28T11:15:26.823 に答える