1、原先的实现过程我们一般使用的是Alamofire,对其单例封装
//
// NetworkTools.swift
//
// Created by targetcloud on 2017/3/26.
// Copyright © 2017年 targetcloud. All rights reserved.
//
//原来1
import UIKit
import Alamofire
enum MethodType {
case get
case post
}
class NetworkTools {
static let share : NetworkTools = NetworkTools()
private init(){}
//参数的finishedCallback闭包在26行使用了,而使用的环境又是一个闭包,则需要加@escaping
func requestData(_ type : MethodType, URLString : String, parameters : [String : Any]? = nil, finishedCallback : @escaping (_ result : Any) -> ()) {
let method = type == .get ? HTTPMethod.get : HTTPMethod.post
Alamofire.request(URLString, method: method, parameters: parameters).responseJSON { (response) in
guard let result = response.result.value else {
print(response.result.error ?? " --- 网络请求发生了错误 --- ")
return
}
finishedCallback(result)
}
}
}
2、在ViewModel中调用自己的封装的网络工具类
//
// TGGiftViewModel.swift
//
// Created by targetcloud on 2017/3/26.
// Copyright © 2017年 targetcloud. All rights reserved.
//
import UIKit
//原来2
class TGGiftViewModel: NSObject {
var results : Array<TGGiftPackage> = []
func requestGiftData(_ complection : @escaping () -> ()) {
NetworkTools.share.requestData(.get, URLString: "http://qf.56.com/pay/v4/giftList.ios", parameters: ["type":0,"page":1,"rows":150]) { (result) in
// print(result)
guard let resultDict = result as? [String:Any] else {return}
guard let typesDictData = resultDict["message"] as? [String:Any] else {return}
for i in 0..<typesDictData.count{
guard let typeDict = typesDictData["type\(i+1)"] as?[String:Any] else {continue}
self.results.append(TGGiftPackage(dict:typeDict))
}
self.results = self.results.filter({ $0.t != 0 }).sorted(by: { $0.t > $1.t })
// print(self.results)
complection()
}
}
}
附VM中使用的两个Model,作为例子,读者可以忽略(注意这里使用MVVM设计模式)
//
// TGGiftPackage.swift
//
// Created by targetcloud on 2017/3/26.
// Copyright © 2017年 targetcloud. All rights reserved.
//
import UIKit
class TGGiftPackage: NSObject {
var t : Int = 0
var title : String = ""
var giftModels : [TGGiftModel] = []
init(dict : [String:Any]) {
super.init()
setValuesForKeys(dict)
}
override func setValue(_ value: Any?, forKey key: String) {
if key == "list"{
if let arr = value as? [[String : Any]]{
for dict in arr{
giftModels.append(TGGiftModel(dict:dict))
}
}
}else{
super.setValue(value, forKey: key)
}
}
override func setValue(_ value: Any?, forUndefinedKey key: String) {
}
}
//
// TGGiftModel.swift
//
// Created by targetcloud on 2017/3/26.
// Copyright © 2017年 targetcloud. All rights reserved.
//
import UIKit
class TGGiftModel: NSObject {
var coin :Int = 0
var img : String = ""
var img2 : String = ""
var gUrl : String = ""
var subject : String = "" {
didSet{
if subject.contains("有声"){
subject = subject.replacingOccurrences