Objective-Shorthand 1.4

Objective-Shorthand 1.4

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布最后发布2014年12月

Soroush Khanlou维护。



  • 作者
  • Soroush Khanlou

Objective-Shorthand是一组Foundation对象的分类,用于让Objective-C中的长代码变得简单。鼓励添加扩展。

使用 Cocoapods 获取 Objective-Shorthand

pod 'Objective-Shorthand', '~> 1.0'

Objective-Shorthand可以帮助什么?

正则表达式

Objective-Shorthand简化了代码,以便检查正则表达式是否与字符串匹配,从以下代码

NSRegularExpression *regularExpression = [NSRegularExpression regularExpressionWithPattern:regex options:0 error:nil];
NSUInteger numberOfMatches = [regularExpression numberOfMatchesInString:self options:0 range:NSMakeRange(0, self.length)];
BOOL doesMatch = numberOfMatches > 0;

BOOL doesMatch = [string matchesRegex:regex];

还包括一个方法来找到给定正则表达式第一次匹配的范围

- (NSRange) rangeOfFirstSubstringMatching:(NSString*)regex;

JSON

使用NSJSONSerialization,您在反序列化为数组和字典之前需要将字符串转换为NSData。Objective-Shorthand简化了这一切。

它提供了与JSONKit相同的接口,但在后台使用内置的Apple JSON序列化器。Ruby社区擅长编写具有一致接口的库,这是Objective-C编写者需要借鉴的。

将JSON字符串转换为NSArrayNSDictionary

- (id) objectFromJSONString;

并将数组或字典转换为NSString

- (NSString *)JSONString;

NSComparisonMethods

OS X SDK有一个称为NSComparisonMethods的奇怪API。基本上,这个API围绕compare:提供包装并使用它定义了以下方法

- (BOOL)isEqualTo:(id)object;
- (BOOL)isLessThanOrEqualTo:(id)object;
- (BOOL)isLessThan:(id)object;
- (BOOL)isGreaterThanOrEqualTo:(id)object;
- (BOOL)isGreaterThan:(id)object;
- (BOOL)isNotEqualTo:(id)object;

由于某种原因,这些方法从未应用到iOS上,尽管它们非常有用。我喜欢这些方法,因为它们的语义比普通的compare:方法强。与[object compare:otherObject] == NSOrderedDescending相比,[object isGreaterThan:otherObject]更容易理解。

如果相关的对象没有响应compare:,将会抛出异常。

数据检测便捷方法

NSDataDetector有时可能难以处理。Objective-Shorthand将复杂的NSDataDetector对象简化为NSString上的单行代码

- (BOOL) isEmail;
- (BOOL) isURL;
- (BOOL) isPhoneNumber;
- (BOOL) isDate;
- (BOOL) isAddress;

NSArray便捷方法

从数组中提取独特元素涉及始终让人困惑的[array valueForKeyPath:@"@distinctUnionOfObjects.self"]。这被封装在内的方法中

- (NSArray*) uniquedArray;

从此不再需要记住如何输入这个字面量字符串!自动补全规则无处不在。

还有一个-sortedArray,它使用默认的compare:选择器来比较对象

- (NSArray*) sortedArray;

Objective-Shorthand 还包括 -reversedArray-flattenedArray

功能集合运算符

最后,Objective-Shorthand 为NSArray提供了一个类别,该类别提供了常规功能集合运算符,如mapselectany,但名称既有语义性又更符合 Objective-C 风格。

each已在 Foundation 中定义,因此不包括在内。

- (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx, BOOL *stop))block;

其他运算符也可以找到,包括select(也称为filter)和reject

- (NSArray*) arrayBySelectingObjectsPassingTest:(BOOL (^)(id object))test;
- (NSArray*) arrayByRejectingObjectsPassingTest:(BOOL (^)(id object))test;

map(也称为collect)和reduce(也称为inject)也可用。

- (NSArray*) arrayByTransformingObjectsUsingBlock:(id (^)(id object))block;
- (id) objectByReducingObjectsIntoAccumulator:(id)accumulator usingBlock:(id (^)(id accumulator, id object))block;

还有 samplematch 可用。

- (id) firstObjectPassingTest:(BOOL (^)(id object))test;
- (id) randomObject;

最后,还有一些布尔运算符

- (BOOL) allObjectsPassTest:(BOOL (^)(id object))test;
- (BOOL) anyObjectsPassTest:(BOOL (^)(id object))test;
- (BOOL) noObjectsPassTest:(BOOL (^)(id object))test;

上述所有方法也适用于 NSSetNSDictionary

字符串方法

感谢@bgottlob,Objective-Shorthand还有一些字符串函数。

- (BOOL)contains:(NSString *)testString
- (BOOL)isEqualToStringIgnoringCase:(NSString *)otherString
- (NSString *)stringByRemovingOccurrencesOfString:(NSString *)removeString

数据转换

每次我需要将NSString转换为NSData时,都必须检查Stack Overflow。再也不会了!

现在NSString-dataRepresentation,而NSData-stringRepresentation

新增功能

欢迎提交拉取请求,但是,每个方法都有一个测试套件和 AppleDoc 遵守的文档。请确保您没有破坏测试,并且如果您添加了新方法,请确保已对其进行了测试覆盖,并包含了相关文档。

如果您有任何问题、评论或建议,请与我联系。您可以在@khanlou上找到我,电子邮件地址为[email protected]