在Xcode 4中,是否可以定义一个Objective-C块属性并且仍然拥有完整的代码完成功能?
如果我使用typedef来定义块:
typedef void (^CompletionBlock)(MyObject *myObj);
然后定义该属性:
@property (nonatomic, copy) CompletionBlock completionBlock;
然后合成属性@synthesize
时,在调用设置器时不会获得完整的代码完成。Xcode会使用typedef,因此代码完成不会使用具有块参数的完整块语法,而是使用typedef。
如果我在头文件中定义了一个使用完整块语法而非typedef的方法原型:
@property (nonatomic, copy) void (^completionBlock)(MyObject *myObj);
然后我使用@synthesize
,提供的setter接近于使用完整的代码完成语法,但关键是它省略了参数名称:
[self setCompletionBlock:(void (^)(MyObject *)) { ... }
最后,如果我尝试合成@synthesize
,然后覆盖setter实现或将原型放入头文件中:
- (void)setCompletionBlock:(void (^)(MyObject *myObj))completionBlock {...}
会出现警告,指出属性类型与访问器类型不匹配。无论如何,我都无法定义块属性和具有完整语法以进行代码完成的setter。我能否同时拥有这两个功能?
谢谢!
typedef
呢?为了减少功能和多余的代码行吗?也许这是苹果在暗示... "不要这样做!"? - Alex Gray