本期JSON解析类型:
{
"weatherinfo": {
"city": "北京",
"cityid": "101010100",
"temp": "10",
"WD": "东南风",
"WS": "2级",
"SD": "26%",
"WSE": "2",
"time": "10:25",
"isRadar": "1",
"Radar": "JC_RADAR_AZ9010_JB",
"njd": "暂无实况",
"qy": "1012"
}
}
-1- 使用cocoapod安装Alamofire和SwjftyJSON
swift开发笔记:cocoapods的安装和使用(2017年9月更新)
swift开发笔记:使用cocoapods导入第三方框架
-2- 创建网络请求工具类
封装一个工具类,自然是方便我们每次请求数据的时候可以方便一点,我们将网络请求最基本的参数输入,回调的时候直接可以获取到json数据,就无需第二次检验数据格式是否正确之类的操作。大大方便我们的开发。
//
// NetworkTools.swift
// MiaoMiao
//
// Created by liwenban on 2017/9/1.
// Copyright © 2017年 hellomiao.cn. All rights reserved.
//
import UIKit
import Alamofire
//两种网络请求方式: get / post
enum MethodType {
case get
case post
}
//封装网络请求工具类
class NetworkTools: NSObject {
//类方法
class func requestData(URLString : String, type : MethodType, parameters : [String : Any]? = nil, finishedCallback : @escaping( _ result : Any) -> ()) {
//将枚举类型的get/post转换成http请求的get/post
let method = type == .get ? HTTPMethod.get : HTTPMethod.post
//Alamofire请求方法
Alamofire.request(URLString, method: method, parameters: parameters).responseJSON { (response) in
//打印数据
print(response)
//校检服务器返回的数据类型是否正确
guard let result = response.result.value else { return }
//将结果回调出去
finishedCallback(result)
}
}
}
-3- 记得开启网络请求权限
屏幕快照 2017-10-01 下午10.39.06.png-4- 源代码
//
// ViewController.swift
// WeatherDemo
//
// Created by liwenban on 2017/10/1.
// Copyright © 2017年 hellomiao.cn. All rights reserved.
//
import UIKit
import SwiftyJSON
class ViewController: UIViewController {
//定义控件
@IBOutlet weak var cityLabel: UILabel!
@IBOutlet weak var tempLabel: UILabel!
@IBOutlet weak var WDLabel: UILabel!
@IBOutlet weak var WSLabel: UILabel!
@IBOutlet weak var SDLabel: UILabel!
@IBOutlet weak var timeLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
//一个请求数据的按钮触发事件
@IBAction func getWeather(_ sender: Any) {
//向一个请求北京天气的接口,方法是用get方法
NetworkTools.requestData(URLString: "http://www.weather.com.cn/adat/sk/101010100.html", type: .get) { (result : Any) in
//回调的json数据进行解析,首先获取 键:weatherinfo的值,因为值又是一个json数据,所以再解析其里面的键city,获取就是城市信息
let city = JSON(result)["weatherinfo"]["city"].string ?? ""
print(city)
self.cityLabel.text=city;
//以此类推
let temp = JSON(result)["weatherinfo"]["temp"].string ?? ""
self.tempLabel.text = temp
let wd = JSON(result)["weatherinfo"]["WD"].string ?? ""
self.WDLabel.text=wd
let ws = JSON(result)["weatherinfo"]["WS"].string ?? ""
self.WSLabel.text=ws
let sd = JSON(result)["weatherinfo"]["SD"].string ?? ""
self.SDLabel.text=sd
let time = JSON(result)["weatherinfo"]["time"].string ?? ""
self.timeLabel.text=time
}
}
}
因为使用storyboard,附上面定义的一些控件:
QQ20171001-225847.png
网友评论