一种快速且“轻量”的方式来为 Objective-C 开发需求修改方法。
将 Swizzlean 添加到您的项目中
Cocoapods
CocoaPods是向项目中添加Swizzlean
的推荐方式。
- 将
Swizzlean
添加到你的Podfile中:pod 'Swizzlean'
。 - 运行
pod install
来安装pods。 - 使用
#import <Swizzlean/Swizzlean.h>
将Swizzlean添加到你的文件中。
Swift Package Manager (SPM)
Swift Package Manager可以用来将Swizzlean
添加到你的项目中
- 添加
.package(url: "https://github.com/rbaumbach/Swizzlean", from: "1.1.0")
。 - 按照说明将
Swizzlean
包添加到你的项目中。
Carthage
你也可以使用Carthage手动将Swizzlean
框架添加到你的项目中。
从Github克隆
- 从github克隆仓库并直接复制文件,或将其作为git子模块添加。
- 将Swizzlean和RuntimeUtils (.h 和 .m) 文件添加到你的项目中。
如何操作
- 创建一个
Swizzlean
实例,传递你想swizzle的方法的类。 - 调用
swizzleInstanceMethod:withReplacementImplementation:
进行实例方法的swizzle,传入要swizzle的方法的选择器和替换实现。当传入替换实现块时,第一个参数始终是id _self
(指向正在swizzle的‘Class’的指针),之后跟随要swizzle的方法的其他参数。 - 调用
swizzleClassMethod:withReplacementImplementation:
以执行类型方法,将需要替换的实现方法的选择器传递进去。 - 您可以使用
currentInstanceMethodSwizzled
和currentClassMethodSwizzled
方法检查当前被替换的实例/类方法。 - 通过调用
isInstanceMethodSwizzled
和isClassMethodSwizzled
,您可以看到被替换方法的状况。 - 使用重置方法来取消当前正在被替换的实例/类方法的替换。
- 当 Swizzlean 对象被释放时,方法会自动重置。如果您希望在调用
dealloc
方法后保持方法的替换状态,将属性resetWhenDeallocated = NO
设定。
示例使用
Swizzlean *swizzle = [[Swizzlean alloc] initWithClassToSwizzle:[NSString class]];
[swizzle swizzleInstanceMethod:@selector(intValue) withReplacementImplementation:^(id _self) {
return 42;
}];
NSString *number7 = @"7";
NSLog(@"The int value for number7 is: %d", [number7 intValue]);
// returns - The int value for number7 is: 42
[swizzle resetSwizzledInstanceMethod];
NSLog(@"The int value for number7 is: %d", [number7 intValue]);
// returns - The int value for number7 is: 7
测试
本工程已配置使用 fastlane 来运行规格。
首先,在项目目录下运行 setup.sh
脚本以捆绑所需的宝石和 Cocoapods
。
$ ./setup.sh
然后使用 fastlane
在命令行上运行所有规格。
$ bundle exec fastlane specs
版本历史
版本历史可以在 发布页面 找到。
建议、请求、反馈和致谢
感谢您查阅 Swizzlean
满足您的破壳需求。任何反馈都可以发送到:[email protected]。
感谢以下贡献者为保持 Swizzlean
理想化所做的努力:Erik Stromlund & Aaron Koop