ObjCMixin 0.1.1

ObjCMixin 0.1.1

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布日期最后发布2015 年 7 月

Huan Du 维护。



ObjCMixin 0.1.1

  • 作者:
  • Huan Du

用法

要运行示例项目,克隆仓库,并首先从 Example 目录运行 pod install

Example/Tests/Tests.m 中有一个测试用例。理解如何在 Objective-C 中编写 mix-in 是一个好的开始。

导入 ObjCMixin

#import <ObjCMixin/ObjCMixin.h>

定义和实现一个模块

声明一个模块。

@module(MyModule)
@property(nonatomic, strong) NSString *prefix;
- (void)saySomething:(NSString *)something;
@end

在一个 .m 文件中实现模块方法。

@module_implementation(MyModule)

// Module must implement methods required by property explicitly.
- (NSString *)prefix {
  // Use `module_ivar` to retrieve a variable in module.
  return module_ivar(self, prefix);
}

- (void)setPrefix:(NSString *)prefix {
  // Update module instance variable.
  module_ivar(self, prefix) = prefix;
}

// Implement method as usual.
- (void)saySomething:(NSString *)something {
  NSString *prefix = _prefix;
  NSLog(@"%@: %@", prefix, something);
}

@end

将模块与接口混入

声明一个接口。

@interface Foo : NSObject<MyModule>
- (void)foo;
@end

.m 文件中实现 Foo 的方法,并将其与 MyModule 混入。

@mixin(Foo, MyModule)

@implementation Foo

- (void)foo {
    NSLog(@"Foo");
}

@end

使用混合接口

使用 Foo 调用 MyModule 中的方法。

Foo *f = [[Foo alloc] init];
[f hello];
[f foo];
f.prefix = @"Hey";
NSLog(@"%@, you!", f.prefix);

辅助宏

ObjCMixin 提供以下宏来使混入更酷。

  • @module(ModuleName):声明一个模块。
  • @module_implementation(ModuleName):实现模块方法。
  • @mixin(TargetClass, ModuleName):将模块中的所有方法复制到 TargetClass 中。
  • module_ivar(self, ivar):获取或设置与模块实例绑定的变量。

限制

ObjCMixin 使用 Objective-C 运行时 API 来捣鼓类。由于运行时 API 的限制,ObjCMixin 只能将模块方法复制到目标类。无法从模块类复制实例变量和合成属性到目标类。

基本上,可以将模块视为一个 分类。模块和分类之间的唯一区别是模块中的代码可以与多个接口共享。

安装

ObjCMixin 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中:

pod "ObjCMixin", "~> 0.1.0"

作者

Huan Du,[email protected]

许可证

ObjCMixin 采用 MIT 许可协议。更多详情请参阅 LICENSE 文件。