libvarobjc 1.0.0

libvarobjc 1.0.0

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布上次发布2015 年 6 月

dalu93 维护。



  • 作者
  • Luca DAlberti

这是什么?

这是一个小巧的 Objective-C 宏库,用于提高代码简洁性,其中包括 @morph@var@with。在使用时,代码补全和 Xcode 缩进工作正常。以下是一些示例,更多详细信息和示例可以在头文件和单元测试中找到。

示例

@morph

因为实际上没有更好的方法,所以在 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;
 });

@var

通常,您会像这样声明和初始化一个局部变量

NSMutableArray *arr = [NSMutableArray array];

但是,你真的需要两次指定 NSMutableArray 吗?通常,两个表达式的 typeof 是相同的。相反,我们可以使用编译器已经知道的信息来完成这个操作

@var(arr, [NSMutableArray array]);

附加功能:变量声明对齐更好

@var(sillyString, @"Flibberty Slazzozalmockle!!");
@var(set, [NSMutableSet set]);
@var(count, 1);

@with

有时您想对某个对象进行一系列操作 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