NSObject-Rx 安装全攻略:CocoaPods、Carthage 与 SwiftPM 三种方式终极对比
NSObject-Rx 安装全攻略:CocoaPods、Carthage 与 SwiftPM 三种方式终极对比
【免费下载链接】NSObject-RxHandy RxSwift extensions on NSObject, including rx.disposeBag.项目地址: https://gitcode.com/gh_mirrors/ns/NSObject-Rx
对于正在使用 RxSwift 的 iOS 开发者来说,NSObject-Rx 安装几乎是每新建一个响应式项目都会遇到的环节。NSObject-Rx 是一个轻量级的 RxSwift 扩展库,它为所有 NSObject 子类自动提供rx.disposeBag属性,让你告别在每个类里手动声明let disposeBag = DisposeBag()的重复劳动。本文将从零开始,用最通俗的语言,带你一次性掌握NSObject-Rx 的三种主流安装方式——CocoaPods、Carthage 与 SwiftPM,并给出直观的终极对比,帮你快速选出最适合自己项目的方案。
上图正是 NSObject-Rx 诞生的原因:GitHub 上搜一下let disposeBag = DisposeBag(),能搜出 489 条几乎一模一样的重复声明 😅。这个库的核心实现其实非常简洁,全部源码只有两个文件:NSObject+Rx.swift 负责提供rx.disposeBag属性,HasDisposeBag.swift 则是一个协议,让不继承 NSObject 的类型也能拥有自己的disposeBag。
安装前必看:环境与版本要求
在开始 NSObject-Rx 安装之前,先确认你的开发环境满足以下条件:
| 项目 | 最低要求 |
|---|---|
| iOS / tvOS | 9.0+ |
| macOS | 10.10+ |
| watchOS | 3.0+ |
| Swift | 5.2+ |
| RxSwift | ~> 6.2 |
最新版本为5.2.2(可查看 NSObject+Rx.podspec 确认版本号)。下面进入正题,逐一演示三种安装方式。
方式一:CocoaPods 安装 NSObject-Rx 的最快方法
CocoaPods 是 iOS 生态最老牌、资料最多的依赖管理工具,也是 NSObject-Rx 官方推荐的主要开发方式(项目自带的 Demo/Podfile 就是这么配的)。
一键安装步骤
- 确保已安装 CocoaPods:
sudo gem install cocoapods - 在项目根目录的
Podfile中添加一行:pod 'NSObject+Rx' - 执行
pod install,之后必须用生成的.xcworkspace打开项目 - 在需要使用的地方
import NSObject_Rx即可
小提示 💡
如果你的项目要指定版本,可以写成pod 'NSObject+Rx', '~> 5.2'。遇到 "No such module" 报错时,先检查是否使用了use_frameworks!,并清理一下 DerivedData。
方式二:Carthage 集成 NSObject-Rx 的完整配置流程
Carthage 的特点是「去中心化」:它只负责把依赖编译成 framework,集成工作由你自己在 Xcode 中完成,项目结构更干净,也更容易排查问题。
最快配置方法
- 安装 Carthage:
brew install carthage - 在项目根目录创建
Cartfile,写入:github "RxSwiftCommunity/NSObject-Rx" ~> 5.2.2 - 运行
carthage update --platform ios(只针对 iOS 平台,速度更快) - 把编译好的
RxSwift.framework和NSObject_Rx.framework拖入项目的 Frameworks 目录(无需勾选 "Copy items if needed") - 添加 Run Script 构建阶段,填入
/usr/local/bin/carthage copy-frameworks,并在 Input Files 中列出两个 framework 路径 - 同样通过
import NSObject_Rx使用
项目自身的 Cartfile 就是现成参考,依赖声明格式可以直接照抄。
方式三:SwiftPM 集成 NSObject-Rx 的原生方案
Swift Package Manager 从 Xcode 11 起就是苹果官方力推的依赖管理工具,无需任何额外安装,是目前上手成本最低的方案。
最简集成步骤
- 在 Xcode 菜单栏选择
File > Add Package Dependencies... - 输入仓库地址:
https://gitcode.com/gh_mirrors/ns/NSObject-Rx,等待解析 - 选择版本规则(推荐
Up to Next Major Version),点击 Add Package 完成 - 若使用命令行或跨平台工程,也可以直接在 Package.swift 中声明依赖:
.package(url: "https://gitcode.com/gh_mirrors/ns/NSObject-Rx", from: "5.2.2")
小提示 💡
SwiftPM 方案中HasDisposeBag协议同样可用(该问题在 5.1.1 版本已修复),非 NSObject 类型也能享受自动销毁的便利。
三种安装方式终极对比:一张表看懂差异
| 对比维度 | CocoaPods | Carthage | SwiftPM |
|---|---|---|---|
| 上手难度 | ⭐⭐⭐ 中等 | ⭐⭐⭐⭐ 稍难 | ⭐ 最简单 |
| 安装依赖 | 需装 gem | 需装 Homebrew | 无需安装 |
| 集成方式 | 自动生成 workspace | 手动链接 framework | Xcode 原生支持 |
| 适合人群 | 老项目、团队统一规范 | 追求项目结构干净 | 新项目、个人开发者 |
| 排查难度 | 报错时需清理缓存 | 需检查构建脚本 | 问题最少 |
一句话结论:新项目直接用 SwiftPM,省心省力;维护多年的老项目跟着团队现有习惯走,CocoaPods 或 Carthage 也完全够用 👍。
安装完成后的第一个示例:快速上手
无论用哪种方式安装,使用体验完全一致。看一个最简单的小例子:
import NSObject_Rx import RxSwift class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() Observable.just("Hello NSObject-Rx") .subscribe(onNext: { print($0) }) .disposed(by: rx.disposeBag) // 无需手动声明 disposeBag! } }rx.disposeBag的行为与普通属性完全一致:当对象被释放(deinit)时,DisposeBag 会自动清空并取消所有订阅,有效避免内存泄漏。它的底层是通过 Objective-C 关联对象实现的,读写都做了线程安全处理,具体细节可以参考 NSObject+Rx.swift 源码。
常见问题 FAQ 🤔
Q1:安装后提示找不到模块怎么办?A:先确认是否在正确的 target 中添加了依赖,CocoaPods 用户检查use_frameworks!,Carthage 用户检查 Run Script 阶段是否配置正确。
Q2:我的类不继承 NSObject,还能用吗?A:可以!让你的类遵循HasDisposeBag协议即可,具体见 HasDisposeBag.swift 的定义,协议会自动提供一个默认的disposeBag。
Q3:三种方式可以混用吗?A:不建议混用,同一个依赖重复集成会导致符号冲突。选择一个方案,一用到底最稳妥。
总结
NSObject-Rx 安装本身并不复杂,关键在于理解三种工具各自的适用场景。本文从环境要求、逐步骤安装、对比表格到常见问题,已经帮你把整个流程梳理得明明白白。还等什么?选一种方式,立刻把rx.disposeBag用起来,让你的 RxSwift 代码更加简洁优雅吧!🚀
【免费下载链接】NSObject-RxHandy RxSwift extensions on NSObject, including rx.disposeBag.项目地址: https://gitcode.com/gh_mirrors/ns/NSObject-Rx
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
