【发布时间】:2012-02-25 15:31:24
【问题描述】:
是否可以在 Xcode 4 中定义一个 Objective-C 块属性但仍具有完整代码完成功能?
如果我使用 typedef 来定义块:
typedef void (^CompletionBlock)(MyObject *myObj);
然后定义属性:
@property (nonatomic, copy) CompletionBlock completionBlock;
然后@synthesize 调用setter 时我没有获得完整代码完成的属性。 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 {...}
发出警告,指出属性类型与访问器类型不匹配。无论我如何尝试修改语法,我都无法同时定义块属性和具有代码完成完整语法的设置器。我可以把我的蛋糕也吃掉吗?
谢谢!
【问题讨论】:
-
它提出了这个问题......为什么
typedef?为了减少功能和半冗余的代码行?也许这就是 Apple 的说法……“不要那样做!”??
标签: ios objective-c xcode xcode4 objective-c-blocks