如何在XCode中获取块变量的正确自动完成?

bog*_*gen 4 xcode ios objective-c-blocks

我有一个块作为实例变量存储在类中

typedef void ((^didSelectWord)(NSString* word));
@property (nonatomic,strong) didSelectWord wordSelected;
Run Code Online (Sandbox Code Playgroud)

我希望xcode自动填充块,就像你输入[UIView animateWithDuration和xcode为它自动填充一个块一样.

当我自动完成我的块时,它就会填满

[self.suggestedSearchTermView setWordSelected:(didSelectWord)wordSelected
Run Code Online (Sandbox Code Playgroud)

代替

[self.suggestedSearchTermView setWordSelected:^(NSString *word) {
Run Code Online (Sandbox Code Playgroud)

是否可以更改某些内容以使Xcode了解如何自动完成此块?

Gab*_*lla 10

好的,我做了一些测试.

显然你有两个(远非完美)选项:

  1. 避免typedef并声明属性为

    @property (nonatomic,strong) void (^wordSelected)(NSString * word);
    
    Run Code Online (Sandbox Code Playgroud)

    如评论中所述,这具有在自动完成中跳过参数名称的缺点.

  2. 在接口中显式添加setter声明

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

    这将导致Xcode在setter定义之前解析类型定义,为您提供您期望的良好自动完成功能.明显的缺点是界面中有额外的setter声明.

也就是说,你应该填写一份错误报告:http://openradar.appspot.com/