前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swift引用AFNetworking

Swift引用AFNetworking

作者头像
码客说
发布2019-10-22 14:06:24
2K0
发布2019-10-22 14:06:24
举报
文章被收录于专栏:码客码客

什么是 CocoaPods

从介绍看,它是主要给 Objective-C 项目用的,但是我们可以很容易地混合 Objective-C 和 Swift 到同个项目,从而利用大量的 CocoaPods 库和 Swift 漂亮舒服的语法。

作为 iOS 开发新手,一定是要紧跟前人脚步,学习使用 CocoaPods 。

基础用法

安装

在命令行下执行。

  • 移除默认镜像 gem sources --remove https://rubygems.org/
  • 添加 taobao Mirror 不然被墙掉没办法下载 gem sources -a https://gems.ruby-china.org/
  • 查看用到的镜像 gem sources -l
  • 安装 sudo gem install cocoapods 备注:苹果系统升级 OS X EL Capitan 后改为 sudo gem install -n /usr/local/bin cocoapods

使用

假设我们已经有个项目,叫 ProjName ,需要使用一些注明的 CocoaPods 库,比如 AFNetworking.

首先,命令行 cd 到我们的项目目录,一般 ls 命令会看到如下几个文件夹:

代码语言:javascript
复制
ProjName
ProjName.xcodeproj
ProjNameTests

赞,就是这里,创建一个 Podfile 文本文件

代码语言:javascript
复制
vim Podfile

写入如下内容

代码语言:javascript
复制
platform :ios, "8.0"
pod "AFNetworking", "~> 2.0"

注意,这段文字不是小编凭空生成的,可以在AFNetworking的github页面找到。 这两句文字的意思是,当前AFNetworking支持的iOS最高版本是iOS 8.0, 要下载的AFNetworking版本大于2.0。 退出编辑命令

代码语言:javascript
复制
:wq

这时候,你会发现你的项目目录中,出现一个名字为Podfile的文件,而且文件内容就是你刚刚输入的内容。注意,Podfile文件应该和你的工程文件.xcodeproj在同一个目录下。

这时候,你就可以利用CocoPods下载AFNetworking类库了。 还是在终端中的当前项目目录下,运行以下命令:

代码语言:javascript
复制
pod install

不更新升级CocoaPods的spec仓库 来缩短pod install的时间

代码语言:javascript
复制
pod install --verbose --no-repo-update

误区install or update

当我们添加新的库的时候,我们要下载库,用的命令是pod install,而不是pod update,因为在第一次pod install后,我们的项目中会生成一个Podfile.lock的文件,他的作用是记录我们新添加库的版本信息,这样的话,如果用pod update,就会下载新版本的库,导致所有代码都要进行更改,这时Podfile.lock也会重新生成 总之 添加库时一定要用pod install命令

因为是在你的项目中导入AFNetworking,这就是为什么这个命令需要你进入你的项目所在目录中运行。 CocoaPods 会创建一个项目同名的 WorkSpace ,然后添加一个叫 Pods 的项目,这个项目编译结果是一个叫 libPods.a的链接库, 它会添加到我们之前的 ProjName 项目中作为编译依赖。

当然,通过命令行执行 pod init 也可以自动创建 Podfile,而且可以自动分析当前项目的 target ,相对来说更好,也更优雅。具体请参考官方手册。这样的好处是更细致,还可以区分多个子项目子 target 。原理大同小异。

然后接下来,命令行执行 open ProjName.xcworkspace,注意这个可不是 .xcodeproj,这个是 CocoaPods 为我们创建的一个 WorkSpace ,包含我们之前的项目,和 Pods 依赖。

开始编码过程。直接在代码里调用,比如写在某个按钮的 @IBAction 里:

代码语言:javascript
复制
let manager = AFHTTPRequestOperationManager()
let url = "http://api.openweathermap.org/data/2.5/weather"
println(url)
//获取原来支持的类型
var typeSet:NSSet=manager.responseSerializer.acceptableContentTypes;
//添加新类型
var newSet=typeSet.setByAddingObject("text/html")
//设置为新的类型集合
manager.responseSerializer.acceptableContentTypes = newSet;
let params = ["lat": 39.26, "lon": 41.03, "cnt":0]
println(params)

manager.GET(url,
    parameters: params,
    success: { (operation: AFHTTPRequestOperation!,
                responseObject: AnyObject!) in
        println("JSON: " + responseObject.description!)
    },
    failure: { (operation: AFHTTPRequestOperation!,
                error: NSError!) in
        println("Error: " + error.localizedDescription)
    })

看起来貌似我们已经可以在 Swift 中使用 AFNetworking 了。结果刚写几句代码一堆类和变量找不到定义,而且坑爹的是很多时候我们只能靠猜测,判断这些 Objective-C 的定义转换成 Swift 定义是什么样子,用起来就是完全靠蒙!

Swift引用OC

那就是按照和 Objective-C 代码混编的例子,添加 Bridging Header

继续

一般说来,你在 Swift 项目新建 Objective-C 类的时候,直接弹出是否创建 Bridge Header 的窗口,点 YES 就是了,这时候一般多出来个 ProjectName-Bridging-Header.h 。然后删掉这个类, Bridging Header 头文件还在。

在这个 Bridging Header 文件里写入要导入的 CocoaPods 库,就可以在 Swift 中使用了。

代码语言:javascript
复制
#import <AFNetworking/AFNetworking.h>

如果没有自动创建头文件的话,这个配置在项目的 Build Settings 中的 Swift Compiler – Code Generation 子项里。

创建一个头文件,指定为 Bridging Header 也可以。

然后编译,成功执行!


手动添加Bridge Header

在项目的根目录添加一个头文件 假如就叫做 Bridge-Header.h 打开项目配置 -> Build Settings 搜索 swift 找到Objective-C Bridging Header 设置值为$(SWIFT_MODULE_NAME)/Bridge-Header.h

OC引用Swift

上面说了新建的Swift项目中怎样调用OC,那么如果本来就是OC项目,怎样调用Swift的类呢

首先

添加 Bridging Header 和上面的一样,并不是OC引用Swift就要再建一个,也就是说OCSwift混编时 只需一个 Bridging Header

然后

Swift文件压根没有 头文件OC中咋调用 这个不用担心,其实系统会自动对所有的Swift类建立一个头文件名字为项目名-Swift.h 假如你的项目名为 Demo01 需要引用Swift类OC文件(xxxx.m)只需添加以下引用 不是Bridging Header 文件

代码语言:javascript
复制
#import "Demo01-Swift.h"

就行了

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是 CocoaPods
  • 基础用法
    • 安装
      • 使用
        • Swift引用OC
          • 手动添加Bridge Header
        • OC引用Swift
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档