libObjCAttr 1.3.6

libObjCAttr 1.3.6

测试已测试
语言语言 Obj-CObjective C
许可证 BSD
发布最后发布2015 年 9 月

Yuru TaustahuzauNikita Leonov 维护。



libObjCAttr - 为您的代码添加属性

libObjCAttr 是 Objective-C 语言的属性驱动编程。它是基于编译时(支持 Xcode 自动完成和错误追踪功能)。我们解决了实现的各个方面,包括性能,所以属性绝不会成为瓶颈。

我们的解决方案有助于减少代码复杂性,使其紧凑并自我文档化。许多语言支持属性,我们将 Objective-C 添加到这个列表中。

安装

CocoaPods 是 libObjCAttr 集成的唯一推荐方式。除了标准的 pod 依赖配置之外,还需要如以下所示的 pod_install 钩子。典型的 Podfile 将如下所示

pod 'libObjCAttr'

post_install do |installer|
    require File.expand_path('ROADConfigurator.rb', './Pods/libObjCAttr/libObjCAttr/Resources/')
    ROADConfigurator::post_install(installer)
end

示例

使用属性标记您的代码非常容易。我们目前支持 4 种 属性类型

  • 类属性
  • IVar 属性
  • 方法属性
  • 属性属性

查看以下示例以了解如何声明它们

RF_ATTRIBUTE(MyAttribute, stringProperty = @"Hello world")
@interface AnnotatedClass : NSObject {

    RF_ATTRIBUTE(MyAttribute, numericProperty = @9000)
    NSObject * _someField;
}

RF_ATTRIBUTE(MyAttribute, blockProperty = ^(int value) { return value; })
- (void)foo;

RF_ATTRIBUTE(MyAttribute, objectProperty = [NSObject new])
@property NSString *name;

@end

属性可以是从 NSObject 继承的任何类或其子类。它可能具有或不具有属性。

#import <ROAD/ROADAttribute.h>

@interface MyAttribute : NSObject

@property NSString *stringProperty;
@property NSNumber *numericProperty;
@property (copy) id blockProperty;
@property id objectProperty;

@end

现在您可以通过以下代码在运行时获取它们

...

NSArray *classAttributes = [AnnotatedClass RF_attributesForClass];
NSArray *ivarAttributes = [AnnotatedClass RF_attributesForIvar:@"_someField"];

// Let's filter it, in case there are many of them
MyAttribute *methodAttributes = [AnnotatedClass RF_attributeForMethod:@"foo" withAttributeType:[MyAttribute class]];
MyAttribute *classAttributes = [AnnotatedClass RF_attributeForProperty:@"name" withAttributeType:[MyAttribute class]];

...

还请查看有关 属性生成器 的信息,它使得幕后魔法变得简单。

要求

libObjCAttr 需要 iOS 5.0 及以上版本。未测试与 4.3 及更旧版本的兼容性。

libObjCAttr 最初是为使用 ARC 而设计的。

由 LibObjCAttr 驱动的解决方案

联系方式

关注 LibObjCAttr 在 Twitter 上 (@LibObjCAttr)

许可证

libObjCAttr 是在以下授权条款下提供的:BSD-3。打开随此分发一起提供的 LICENSE 文件,以查看许可证的完整文本。

贡献

有三种方式可以帮助我们

  • 提出问题。 你发现某些内容不符合预期?让我们知道。
  • 建议功能。 如果你提出了一个新功能并提出给我们,那会更好。
  • 编写一些代码。 我们非常希望看到更多针对我们框架的 pull 请求,只是确保你有最新的源代码。