适用于 Objective-C 项目的实用宏。
SPXDefines 宏无论是在开启还是关闭 ARC 状态下都能正常工作。
要在您的应用中使用 SPXDefines,只需将文件拖入您的项目,并在任何希望使用 SPXDefines 功能的类中导入头文件。
如果您正在使用 PODs,只需在 Podfile 中包含它:pod 'SPXDefines'
描述覆盖
当构建自定义类时,通常将 -description 覆盖提供为更好的输出,以便其他开发者在控制台上。要使其更容易并且获得更好的类型安全,您可以使用我的新描述方法。
- (NSString *)description
{
return SPXDescription(SPXKeyPath(name), SPXKeyPath(age));
}
它展开为:
- (NSString *)description
{
return [super.description stringByAppendingFormat:@"%@", [self dictionaryWithValuesForKeys:@[ @"name", @"age" ].description];
}
注意:此方法仅支持属性或方法,因为内部使用 self 上使用 KVO。
SPXAssertionDefines
为 iOS 项目提供更好的断言处理。它永远不会在内置版本中崩溃,但在 DEBUG 构建中将断言并在有问题的代码行上中断。C 函数内部使用等效的 SPXCAssertTrueOr...
方法。
以下代码将对 'condition' 断言,如果失败,将将断言写入控制台并中断有问题的代码行。在发布构建中,它将简单地返回。
SPXAssertTrueOrReturnNo(condition);
SPXAssertTrueOrReturnNil(condition);
SPXAssertTrueOrReturnError(condition);
SPXAssertTrueOrReturn(condition);
以下代码同样会断言 'condition',但它不会返回,而会执行指定的操作。
SPXAssertTrueOrPerformAction(condition, NSLog(@"Help!"));
SPXEncodingDefines
以下代码将使用 NSCoding 编码或解码变量。它使用 SPXEncode()
和 SPXDecode()
,分别展开为 [aEncoder encodeObject:name forKey:@"name"]
和 [aDecoder decodeObjectForKey:@"name"]
。如果您想提供自定义的编码器、解码器,可以使用 SPXEncodeE 和 SPXDecodeE 的等效方法。
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSInteger age;
...
- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (!self) return nil;
decode(name);
decode(age);
return self;
}
- (void)encodeWithCoder:(NSCoder *)aCoder
{
encode(name);
encode(age);
}
SPXLoggingDefines
以下方法将首先寻找 CocoaLumberjack,如果存在,则使用它进行日志记录。如果不存在,则回退到 NSLog,但具有改进的日志记录功能;)
格式化漂亮的
YYYY-MM-DD HH:MM:SS | 行号 | 类 | SELECTOR | 信息
示例
2014-03-21 14:31:22 | 23 | AppDelegate | applicationDidFinishLaunchingWithOptions: | Hello World!
logMethod; // simply logs the current class and selector
SPXLog(@"Hello World!");