Moya使用

Moya使用

========================
我觉得看这代码就知道怎么用了,其实就是一个整理。

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
//
// IntroductionAPI.swift
// RunInto
//
// Created by 张赛东(手机:15674119605) on 2021/3/30.
// Copyright © 2021 adong666666. All rights reserved.
//
// swiftlint:disable identifier_name
import Foundation
import Moya
import HandyJSON

let ip = "http://47.119.162.99"

let culturalRelicsDataUrl = ip + "/runinto/culturalRelicsData"
let models3DDataUrl = ip + "/runinto/models3DData"
let introductionDataUrl = ip + "/runinto/introductionData"
let paintingModeslDataUrl = ip + "/runinto/paintingModelsData"
let paintinggRomanceDataUrl = ip + "/runinto/paintingRomanceData"
let stylePredictDataUrl = ip + "/runinto/stylePredictData"
/// 介绍接口
let introductionPovider = MoyaProvider<IntroductionAPI>()

enum IntroductionAPI {
case culturalRelicsData
case models3DData
case introductionData
case paintingModeslData
case paintinggRomanceData
case stylePredictData
}

extension IntroductionAPI: TargetType {
//服务器地址
public var baseURL: URL {
return URL(string: ip)!
}

var path: String {
switch self {
case .culturalRelicsData:
return "/runinto/culturalRelicsData"
case .models3DData:
return "/runinto/models3DData"
case .introductionData:
return "/runinto/introductionData"
case .paintingModeslData:
return "/runinto/paintingModelsData"
case .paintinggRomanceData:
return "/runinto/paintingRomanceData"
case .stylePredictData:
return "/runinto/stylePredictData"
}
}

var method: Moya.Method { return .get }
var task: Task {
let parameters: [String: Any] = [:]
return .requestParameters(parameters: parameters, encoding: URLEncoding.default)
}

var sampleData: Data { return "".data(using: .utf8)!}
var headers: [String: String]? { return nil }
}


使用示例

在合适的地方调用,mapJSON()也是Moya里的函数。JSON()则是SwiftyJSON里的常用函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
//
// NetworkTool.swift
// RunInto
//
// Created by 张赛东(手机:15674119605) on 2021/3/30.
// Copyright © 2021 adong666666. All rights reserved.
//
//swiftlint:disable void_return
import Foundation
import Alamofire
import SwiftyJSON
import HandyJSON

protocol NetworkToolProtocol {
static func loadCulturalRelicsData(input: IntroductionAPI, completionHandler: @escaping ([Introduction?]) -> ())
}

extension NetworkToolProtocol {
static func loadCulturalRelicsData(input: IntroductionAPI, completionHandler: @escaping ([Introduction?]) -> ()) {
// AF.request(culturalRelicsDataUrl, method: .get, parameters: [:]).responseJSON(completionHandler: { (response) in
// let value = response.value
// let json = JSON(value as Any)
// log(json)
// })
introductionPovider.request(input) { (result) in
if case let .success(response) = result {
//解析数据
let data = try? response.mapJSON()
let json = JSON(data!)
let culturalRelicsData = json["data"]["culturalRelicsData"]
//log(json)
//log(culturalRelicsData)
if let mappedObject = JSONDeserializer<Introduction>.deserializeModelArrayFrom(json: culturalRelicsData.description) {
//log(mappedObject)
//log(mappedObject.count)
completionHandler(mappedObject)
}
}
}
}
}

struct NetworkTool: NetworkToolProtocol {}