1、关于Alamofire 4.0 引用问题
在使用这个库之前我尝试把这个库的Source文件夹拖到自己的项目工程中,然后写入 import Alamofire
,编译不通过,报下面的错误:
后来查阅资料,发现这个库的引用有点类似于引用静态库的其中一种方式,就是把静态库的项目文件拖到需要引用的项目,然后在对应的target中生成.a或framework。
注意:
1、向项目中拖入第三方库工程,确保第三方库工程是关闭的,不然添加不进去哦
2、编译对应的target后,需要在TARGETS->General->Embeded Binaries 中加入Alamofire.framework***
如下图:
2、基本使用。这个就比较简单了,下面贴下代码。
import UIKit
/* 如果引用不了下面这句就 build一下 */
import Alamofire
class ViewController: UIViewController {
let BaiduURL = "http://apis.haoservice.com/lifeservice/cook/query?"
override func viewDidLoad() {
super.viewDidLoad()
/* 基础的请求 及JSON数据解析 */
Alamofire.request("https://api.500px.com/v1/photos").responseJSON { (DataResponse) in
print(DataResponse.data)
if let Json = DataResponse.result.value{
print("Json:\(Json) ")
// NSData->NSDictonary
let dic = try? JSONSerialization.jsonObject(with: DataResponse.data!, options: JSONSerialization.ReadingOptions.allowFragments) as! [String: Any]
let status = dic? ["status"]
print("status is \(status)")
}
}
self.getData()
self.postData()
}
func getData(){
let parameters: Dictionary = ["key" : "93c921ea8b0348af8e8e7a6a273c41bd"]
Alamofire.request("http://apis.haoservice.com/weather/city", method:.get, parameters:parameters).responseJSON { (response) in
switch response.result {
case .success:
print("SUCCESS")
case .failure:
print("ERROR")
}
}
}
func postData() {
// POST
let parameters: Dictionary = ["key" : "93c921ea8b0348af8e8e7a6a273c41bd"]
Alamofire.request("http://apis.haoservice.com/weather/city", method: .post, parameters:parameters) .responseJSON {response in
print("result==\(response.result)")
if let jsonValue = response.result.value {
/*
error_code = 0
reason = ""
result = 数组套字典的城市列表
*/
print("code: \(jsonValue)")
}
}
}
}
这里顺带提一个疑问:Any 和 AnyObject 的区别。
在上面的JSON数据转成Dictionary的时候,我是这样写的:
let dic = try? JSONSerialization.jsonObject(with: DataResponse.data!, options: JSONSerialization.ReadingOptions.allowFragments) as! [String: Any]
这里最后的as![String: Any],其实也是可以写成:as! [String: AnyObject]的,
在《The Swift Programming Language 中文版》中提到:
• Any 可以表示任何类型,包括函数类型。
• AnyObject 可以表示任何类类型的实例。
个人觉得这个地方写成Any是比较妥当的,但是写成AnyObject在Swift3.0中也是支持的,所以这两者这方面差别很小。
——–2017.2.16日更新———
真机报错:Library not loaded: @rpath/Alamofire.framework/Alamofire
解决方法:如下图