Open KkevinK opened 3 years ago
随着学习的深入,我们需要使用到一些第三方库了。今天主要使用的是ReactiveX的swift版本已经Moya。 前者(简称Rx)是一个可以帮助我们简化异步编程的框架。它有一个重要的概念就是观察者和被观察者,具体的知识点可以参考这个链接:https://beeth0ven.github.io/RxSwift-Chinese-Documentation/
为什么要使用Rx呢?当我在swift中使用http调用时,没有以前C#那样的async await,而且他的http都是通过回调拿到返回的数据。当请求一多,或者要连续调用时,就会陷入所谓的回调地狱。其实Rx与之前例子中的Combine有一些类似,说不清楚谁好谁坏,虽然Combine更新一些(19年推出,并且Xcode自带),但是Rx作为跨越多个平台的强力第三方库,总有起独到之处。
为什么要使用Moya呢?Moya 是一个基于 Alamofire 的更高层网络请求封装抽象层。它可以对我们项目中的所有请求进行集中管理,方便开发与维护。同时 Moya 自身也提供了对 RxSwift 的扩展,通过与 RxSwift 的结合,能让 Moya 变得更加强大。参考链接:https://www.hangge.com/blog/cache/detail_2012.html
首先我们需要先把第三方库加入自己的项目,在一开始的时候,我使用的是手动加入加入,可以看到我下载了许许多多的第三方库: 其实一开始我只使用了1到2个第三方库,所以使用手动加入到方式也还算ok,先简单介绍一下吧:
用moya举例,打开项目后生成,在Products文件夹中选择Moya.framework,然后右键show in finder:
在文件夹中我们看到了生成出来的Framework:
记住这个红框,这就是坑的地方,后面会说! 然后,直接把它拖进项目中:
记得选择copy items if needed,随后就可以在项目中使用了。
看上去好像挺简单的,那么他坑在什么地方呢? 首先,此处只用了一个第三方库,但是随着项目的复杂度进展,势必会使用到更多,如果每一个库你都需要下载代码并且拖入自己的项目,一来费时费力,二来也很难看!给大家看一下我的反面教材:
其次,就是我们前面所说的红框,它是什么意思呢?它的意思是这个framework是给iphone,即真机使用的,而你调试的时候,使用的是模拟器,他和真机使用的Framework不一样,不通用!
如图在生成时可以选择是真机还是模拟器。那么有没有同时满足真机和模拟器的方法呢?有!使用lipo命令,可以将两个framework合并起来,使其同时满足真机和模拟器。听起来好像还不错,但是用了两个我就放弃了。同样的道理,库一多,你每一个库都要使用命令合成一次,一样非常繁琐,所以还是不推荐。如果有兴趣了解可以自行网上搜索。
所以这里我推荐使用CocoaPods,其实在下载RxSwift的时候已经推荐我使用了,但是我当时没有使用,因为偷了一个懒,后来才后悔莫及。 CocoaPods官网:https://guides.cocoapods.org/using/using-cocoapods.html
CocoaPods是一款xcode中统一管理第三方库的工具,下面简单介绍一下如何使用,具体更细腻的使用方式可以去官网产看。 首先是安装:
$ sudo gem install cocoapods
安装完后直接开始使用:
照常在Xcode中创建一个新项目。
打开一个终端窗口,然后$ cd进入您的项目目录。
创建一个Podfile。这可以通过运行来完成$ pod init。
打开您的Podfile。第一行应指定支持的平台和版本。
platform :ios, '9.0'
随后将第三方库导入自己的项目
target 'MyApp' do pod 'ObjectiveSugar' end
然后运行install
$ pod install
运行之后项目中会多出一个MyApp.xcworkspace的文件,之后打开项目就要用这个文件打开,因为CocoaPods将所有依赖的库都放在一个名为Pods的项目下,然后让主项目依赖Pods项目。然后,我们编码工作都从主项目转移到Pods项目。Pods项目最终会编译为一个libPod-项目名.a静态库,主项目依赖于这个静态库。
我的项目中使用的库如下图所示:
其实这里我遇到了第二个坑,一开始我导入了RxSwift6.2和Moya,但是却一直用不了Moya的rx扩展,只有才发现其实是Moya库使用的RxSwift是5.几,与RxSwift冲突了,随后直接使用 pod 'Moya/RxSwift', '~> 14.0' 一起倒入了Moya和RxSwift。
pod 'Moya/RxSwift', '~> 14.0'
准备工作完成了,下一篇讲开始实战。
随着学习的深入,我们需要使用到一些第三方库了。今天主要使用的是ReactiveX的swift版本已经Moya。 前者(简称Rx)是一个可以帮助我们简化异步编程的框架。它有一个重要的概念就是观察者和被观察者,具体的知识点可以参考这个链接:https://beeth0ven.github.io/RxSwift-Chinese-Documentation/
为什么要使用Rx呢?当我在swift中使用http调用时,没有以前C#那样的async await,而且他的http都是通过回调拿到返回的数据。当请求一多,或者要连续调用时,就会陷入所谓的回调地狱。其实Rx与之前例子中的Combine有一些类似,说不清楚谁好谁坏,虽然Combine更新一些(19年推出,并且Xcode自带),但是Rx作为跨越多个平台的强力第三方库,总有起独到之处。
为什么要使用Moya呢?Moya 是一个基于 Alamofire 的更高层网络请求封装抽象层。它可以对我们项目中的所有请求进行集中管理,方便开发与维护。同时 Moya 自身也提供了对 RxSwift 的扩展,通过与 RxSwift 的结合,能让 Moya 变得更加强大。参考链接:https://www.hangge.com/blog/cache/detail_2012.html
首先我们需要先把第三方库加入自己的项目,在一开始的时候,我使用的是手动加入加入,可以看到我下载了许许多多的第三方库: 其实一开始我只使用了1到2个第三方库,所以使用手动加入到方式也还算ok,先简单介绍一下吧:
用moya举例,打开项目后生成,在Products文件夹中选择Moya.framework,然后右键show in finder:
在文件夹中我们看到了生成出来的Framework:
记住这个红框,这就是坑的地方,后面会说! 然后,直接把它拖进项目中:
记得选择copy items if needed,随后就可以在项目中使用了。
看上去好像挺简单的,那么他坑在什么地方呢? 首先,此处只用了一个第三方库,但是随着项目的复杂度进展,势必会使用到更多,如果每一个库你都需要下载代码并且拖入自己的项目,一来费时费力,二来也很难看!给大家看一下我的反面教材:
其次,就是我们前面所说的红框,它是什么意思呢?它的意思是这个framework是给iphone,即真机使用的,而你调试的时候,使用的是模拟器,他和真机使用的Framework不一样,不通用!
如图在生成时可以选择是真机还是模拟器。那么有没有同时满足真机和模拟器的方法呢?有!使用lipo命令,可以将两个framework合并起来,使其同时满足真机和模拟器。听起来好像还不错,但是用了两个我就放弃了。同样的道理,库一多,你每一个库都要使用命令合成一次,一样非常繁琐,所以还是不推荐。如果有兴趣了解可以自行网上搜索。
所以这里我推荐使用CocoaPods,其实在下载RxSwift的时候已经推荐我使用了,但是我当时没有使用,因为偷了一个懒,后来才后悔莫及。 CocoaPods官网:https://guides.cocoapods.org/using/using-cocoapods.html
CocoaPods是一款xcode中统一管理第三方库的工具,下面简单介绍一下如何使用,具体更细腻的使用方式可以去官网产看。 首先是安装:
$ sudo gem install cocoapods
安装完后直接开始使用:
照常在Xcode中创建一个新项目。
打开一个终端窗口,然后$ cd进入您的项目目录。
创建一个Podfile。这可以通过运行来完成$ pod init。
打开您的Podfile。第一行应指定支持的平台和版本。
platform :ios, '9.0'
随后将第三方库导入自己的项目
然后运行install
$ pod install
运行之后项目中会多出一个MyApp.xcworkspace的文件,之后打开项目就要用这个文件打开,因为CocoaPods将所有依赖的库都放在一个名为Pods的项目下,然后让主项目依赖Pods项目。然后,我们编码工作都从主项目转移到Pods项目。Pods项目最终会编译为一个libPod-项目名.a静态库,主项目依赖于这个静态库。
我的项目中使用的库如下图所示:
其实这里我遇到了第二个坑,一开始我导入了RxSwift6.2和Moya,但是却一直用不了Moya的rx扩展,只有才发现其实是Moya库使用的RxSwift是5.几,与RxSwift冲突了,随后直接使用
pod 'Moya/RxSwift', '~> 14.0'
一起倒入了Moya和RxSwift。准备工作完成了,下一篇讲开始实战。