测试已测试 | ✓ |
语言语言 | Objective C++Objective C++ |
许可证 | MIT |
发布最新发布 | 2015年10月 |
由Victor Pavlychko维护。Victor Pavlychko.
DynamicAssociatedProperties库使用objc_getAssociatedObject/objc_setAssociatedObject自动生成category中使用@dynamic声明的属性的访问器,用于后端存储。
支持的属性属性
支持的类型
char
unsigned char
short
unsigned short
int
unsigned int
long
unsigned long
long long
unsigned long long
float
double
BOOL
CGPoint
CGVector
CGSize
CGRect
CGAffineTransform
UIEdgeInsets
UIOffset
CATransform3D
要在分类中添加属性,只需像往常一样在*.h文件中声明它们
@interface AWTestClass (AWTestCategory)
@property (copy) NSString *awStringProperty;
@property (weak) id awWeakProperty;
@property (assign) NSInteger awIntegerProperty;
@property (assign) CGRect awCGRectProperty;
@end
并在*.m文件中定义为@dynamic。调用+[NSObject dynamicAssociatedPropertiesRegisterAll]将注册当前类的所有@dynamic属性。
#include <DynamicAssociatedProperties/DynamicAssociatedProperties>
@implementation AWTestClass (AWTestCategory)
@dynamic awStringProperty;
@dynamic awWeakProperty;
@dynamic awIntegerProperty;
@dynamic awCGRectProperty;
+ (void)load
{
[self dynamicAssociatedPropertiesRegisterAll];
}
@end
自定义值类型可以轻松注册,但类型安全的解决方案将需要Objective-C++文件。只需将您的实现文件重命名为*.mm,并遵循此语法
#include <DynamicAssociatedProperties/AccessorBlockFactoryRegistry.h>
@implementation AWTestClass (AWTestCategory)
+ (void)load
{
AccessorBlockFactoryRegistry::instance().registerGetterAndSetterFactories<MyStructType>();
}
@end
当添加缺失的SDK结构体时,请考虑扩展NSObject+DynamicAssociatedProperties.mm,并提交拉取请求 ;)
DynamicAssociatedProperties通过CocoaPods提供。要安装它,只需将以下行添加到Podfile中
pod "DynamicAssociatedProperties"
要运行示例项目,克隆仓库,然后首先从Example目录中运行pod install。
有几个可选项目可用
维克多·巴夫利奇科,[email protected]
DynamicAssociatedProperties 可在 MIT 许可证下使用。有关更多信息,请参阅 LICENSE 文件。