Objective-C是C,C是危险的。不要盲目地进行对象强制类型转换。坚持使用高级语言功能,并编写更易于阅读的代码。
这样做
NSMutableArray *mArray = [NSMutableArray safe_cast:array];
// `mArray` is nil if `array` is not a mutable array, or `array` if it is.
或者只为可以响应该选择器的集合成员调用方法。
[array safe_makeObjectsSafelyPerformSelector:@selector(method)];
或者在特定类型的对象上使用块进行枚举。
[array safe_enumerateObjectsOfKind:[MyObject class]
usingBlock:^(MyObject *obj, NSUInteger idx, BOOL *stop) {
[obj setNumber:@3];
}];
或者协议
[array safe_enumerateObjectsConformingToProtocol:@protocol(MyProtocol)
usingBlock:^(id<MyProtocol> *obj, NSUInteger idx, BOOL *stop) {
[obj setNumber:@3];
}];
SafeCast具有很多这样的方法,涵盖了NSArray
、NSSet
、NSDictionary
和NSOrderedSet
。
我想给像NSMapTable
或NSHashTable
这样的集合提供覆盖可能不是好主意,因此没有计划这么做。
首先,它非常小。头部的文档比代码大得多。并且经过测试。你可能不需要它。但许多事情都很有优势。
SafeCast可以作为CocoaPod使用。
pod 'SafeCast'
它绝对需要的代码行更少。在我看来,它比安全地做的更冗长方式更容易阅读和思考。它将类型安全检查放在前端并保持在高级别。
也许你知道自己在做什么。但你总是做正确的事情吗?你代码库中有多少人?他们所有人都多了解Objective-C的C基础?越来越多的开发者正在使用高级或动态语言,并且可能没有意识到什么是安全的,什么不是。
SafeCast想要让它更容易安全地进行强制类型转换...只在安全时进行强制类型转换。
请发送反馈、pull-requests和咖啡。