如何将 RxSwift 用于 Objective-C 和 Swift 项目?

Posted

技术标签:

【中文标题】如何将 RxSwift 用于 Objective-C 和 Swift 项目?【英文标题】:How to use RxSwift for Objective-C and Swift project? 【发布时间】:2017-05-14 08:27:18 【问题描述】:

一个项目是用 Objective-C 语言创建的,后来我在其中使用了 Swift。在我的 pod 文件中,我有几个 Objective-C pod。我尝试使用 RxSwift pod,它不允许我拥有 Swift pod,而且我不能使用 use_frameworks!,因为我有 Objective-C pod。

platform :ios, '8.0'
# use_frameworks!

target 'MyProject' do   
  pod 'STPopup'
  pod 'AFNetworking', '~> 3.1.0'
  pod 'Reachability'
  pod 'SVProgressHUD'
  pod 'CCHMapClusterController'
  pod 'SDWebImage', '~> 3.8.2'
  pod 'DateTools'
  pod 'Fabric'
  pod 'TwitterKit'
  pod 'Crashlytics'
  pod 'SpinKit', '~> 1.1'
  pod 'GPUImage'
  pod 'LLSimpleCamera', '~> 5.0'
  pod 'MGSwipeTableCell'
  pod 'JSONModel'
  pod 'ASIHTTPRequest'
  pod 'PEPhotoCropEditor', :git => 'https://github.com/luyzdeleon/PEPhotoCropEditor'
  pod 'RSKImageCropper', :git => 'https://github.com/luyzdeleon/RSKImageCropper'
  pod 'MXParallaxHeader'
  pod 'Toast', '~> 3.0'
  pod 'TransformerKit'
  pod 'FBSDKLoginKit'
  pod 'FBSDKCoreKit'
  pod 'FBSDKShareKit'
  pod 'FRHyperLabel', '~> 1.0.1'
  pod 'STTweetLabel', :git => 'https://github.com/pabelnl/STTweetLabel.git', :branch => 'master'
  pod 'STTwitter'
  pod 'YSTutorialViewController'
  pod 'CTAssetsPickerController', :git => 'https://github.com/pabelnl/CTAssetsPickerController', :branch => 'master'
  pod 'RDHCollectionViewGridLayout', '~> 1.2'
  pod 'AFNetworking+RetryPolicy'
  pod 'AWSMobileAnalytics', '~> 2.4'
  pod 'CHTCollectionViewWaterfallLayout'
  pod 'BBBadgeBarButtonItem'
  pod 'FMDB'
  pod 'APAddressBook'
  pod 'CTVideoPlayerView'
  pod 'IBProgressButton'
  pod 'VIMVideoPlayer', :git => 'https://github.com/pabelnl/VIMVideoPlayer', :branch => 'master'
  pod 'ICGVideoTrimmer'
  pod 'CRGradientNavigationBar', :git => 'https://github.com/luyzdeleon/CRGradientNavigationBar', :branch => 'master'
  pod 'KILabel', '~> 1.0.1'
  pod 'Firebase/Auth'
  pod 'GoogleSignIn'
  pod 'SwiftTryCatch'
  pod 'libPhoneNumber-iOS', '~> 0.8'
  pod 'IGListKit'
  pod 'SDWebImage-CircularProgressView'
  pod 'RxSwift'
end
我在没有use_frameworks! 的情况下遇到错误:

[!] 用 Swift 编写的 Pod 只能作为框架集成;将use_frameworks! 添加到您的 Podfile 或目标以选择使用它。使用的 Swift Pod 是:RxSwift

use_frameworks! 出错:

[!] 无法将以下嵌入式目标与其各自的宿主目标集成(宿主目标是嵌入“子”目标(如框架或扩展)的“父”目标):

MyProject (true) 和 share (false) 不都设置 use_frameworks!。

【问题讨论】:

你能展示你的 pod 文件吗?你在使用桥接头吗? 是的,我正在使用桥接头文件。 你遇到的错误是什么 @Shabirjan 添加了错误消息。 那么当你使用 pod install 时,会发生什么? 【参考方案1】:

你可以使用use_frameworks!,即使你有Objective-C pods。

【讨论】:

我可以使用,但出现错误并且项目无法运行。 你能说得更具体点吗? 为更清晰而编辑。

以上是关于如何将 RxSwift 用于 Objective-C 和 Swift 项目?的主要内容,如果未能解决你的问题,请参考以下文章

RxSwift - 如何限制缓冲区的时间跨度

哪个 RxSwift 运算符用于唯一发出的元素以及如何使用?

我应该如何访问有关用于使用RxSwift和MVVM填充表格视图的数组的数据

使用 RxSwift 的 TabelView 委托方法

用于将 Single<[Element]> 转换为 Observable<Element> 的 rxSwift 扩展

用于搜索屏幕的 MVVM 和 RxSwift