这是一个小巧的 Objective-C 宏库,用于提高代码简洁性,其中包括 @morph
、@var
和 @with
。在使用时,代码补全和 Xcode 缩进工作正常。以下是一些示例,更多详细信息和示例可以在头文件和单元测试中找到。
因为实际上没有更好的方法,所以在 iOS 代码中你经常会看到这个
CGRect frame = view.frame;
frame.size.width += 10;
view.frame = frame;
使用 @morph
,你可以将它替换为单行代码
@morph(view.frame, _.size.width += 10);
对于更复杂的操作
@morph(view.frame, {
_.size.width += 10;
_.origin.y = 15;
});
通常,您会像这样声明和初始化一个局部变量
NSMutableArray *arr = [NSMutableArray array];
但是,你真的需要两次指定 NSMutableArray
吗?通常,两个表达式的 typeof
是相同的。相反,我们可以使用编译器已经知道的信息来完成这个操作
@var(arr, [NSMutableArray array]);
附加功能:变量声明对齐更好
@var(sillyString, @"Flibberty Slazzozalmockle!!");
@var(set, [NSMutableSet set]);
@var(count, 1);
有时您想对某个对象进行一系列操作 with。例如以下请求
MySuperDescriptivelyNamedRequest *request = [[MySuperDescriptivelyNamedRequest alloc] init];
request.accountId = accountId;
request.successBlock = successBlock;
request.failureBlock = failureBlock;
[self executeRequest:request];
使用 @with
,这将变为
@with([[MySuperDescriptivelyNamedRequest alloc] init], {
_.accountId = accountId;
_.successBlock = successBlock;
_.failureBlock = failureBlock;
[self executeRequest:_];
});
下载 VARMacros.h
,将其添加到 Xcode 项目中,并 #import
。
即将推出 CocoaPod,或者您可以自由地创建一个并拉动请求。
是什么 _
?
这是一个局部变量。是的,这是允许的。
这使用了 blocks 吗?
没有。在需要的地方,宏使用 C 的作用域。您在示例中看到的花括号是一样的(例如 @macroname(thing, { // 我的作用域 C 东西 });
)
宏不好!
1. Apple 使用它们。
2. 这些宏相当简单。
3. 我不同意,好吧,不使用它们。
这隐藏了行为
您的意思是您现在正在读取的这些零和一吗?
这有点(不好看、令人困惑、不清楚)
品味各异。到目前为止,从美学角度来看,我更喜欢使用这些宏的代码。它几乎总是更简洁。对我来说,一旦你了解了宏做了什么,代码也更清晰。
这是 {不可取的,危险的,疯狂的}
可能,待定。
理智的人适应世界;不合理的人坚持试图使世界适应自己。因此,所有进步都取决于不合理的人。
MIT 许可证。见 LICENSE.md。