更新”moya”~>11.0.1;swift4.0。后
ApiService.swift
//
// ApiService.swift
//
import Foundation
import Moya
import SwiftyJSON
var strActionPath = “index.php/action=”
let headerFields: Dictionary
“platform”: “iOS”,
“sys_ver”: String(UIDevice.version())
,
“Content-Type” : “application/json”
]
let appendedParams: Dictionary
// “uid”: “123456” as AnyObject
:]
public var parameterEncoding: ParameterEncoding {
return JSONEncoding.prettyPrinted
}
let endpointClosure = { (target: ApiService) -> Endpoint
let url = target.baseURL.appendingPathComponent(target.path).absoluteString
LTLog(“URL “+url)
return Endpoint
url: url,
sampleResponseClosure: {.networkResponse(200, target.sampleData)},
method: target.method,
task: target.task,
httpHeaderFields: headerFields)
}
let endpointClosureWeb = { (target: ApiService) -> Endpoint
let url = target.path
LTLog(“URL “+url)
return Endpoint
}
private extension String {
var urlEscaped: String {
return self.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!
}
}
let apiProvider = MoyaProvider
let webProvider = MoyaProvider
enum ApiService {
case action(pathUrl:String,parameter:ParameterBase)
//加载非标准接口
case loadWebPage(pageUrl:String)
}
extension ApiService: TargetType {
var headers: [String : String]? {
return nil
}
var parameterEncoding: ParameterEncoding {
return JSONEncoding.prettyPrinted
}
var baseURL: URL {return URL(string: “http://xxxxxxxxxxxx")!}
var path: String {
switch self {
case .action(let pathName,_):
return strActionPath+pathName
case .loadWebPage(let pathPage):
return pathPage
}
}
var method: Moya.Method {
return .post
}
var parameters: [String: Any]? {
switch self {
case .action(_,let parameter):
// let request = parameter.toString()
// let jsondata = try? JSONSerialization.data(withJSONObject: parameter, options: .prettyPrinted)
return parameter.toString()
case .loadWebPage(_):
return nil
}
}
public var task: Task {
return .requestParameters(parameters: parameters!, encoding: JSONEncoding.prettyPrinted)
}
public var sampleData: Data {
switch self {
default:
return “Success”.data(using: String.Encoding.utf8)!
}
}
}
第一篇测试文章,就不说那么多废话了
主要解决Xcode升级9.0后swift版会出bug的问题
环境Xcode9.2。 pod ‘Alamofire’, ‘~> 4.5’ ,”moya”~>8.0
直接上代码了
//
// ApiService.swift
//
import Foundation
import Moya
import SwiftyJSON
var strActionPath = “index.php/action=”
let headerFields: Dictionary
“platform”: “iOS”,
“sys_ver”: String(UIDevice.version())
,
“Content-Type” : “application/json”
]
let appendedParams: Dictionary
:]
public var parameterEncoding: ParameterEncoding {
return JSONEncoding.prettyPrinted
}
let endpointClosure = { (target: ApiService) -> Endpoint
let url = target.baseURL.appendingPathComponent(target.path).absoluteString
LTLog(“URL “+url)
return Endpoint
url: url,
sampleResponseClosure: {.networkResponse(200, target.sampleData)},
method: target.method,
parameters: target.parameters,
parameterEncoding: parameterEncoding,
httpHeaderFields: headerFields)
.adding(parameters: appendedParams)
}
let endpointClosureWeb = { (target: ApiService) -> Endpoint
let url = target.path
LTLog(“URL “+url)
return Endpoint
.adding(parameters: appendedParams)
.adding(newHTTPHeaderFields: headerFields)
}
private extension String {
var urlEscaped: String {
return self.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!
}
}
let apiProvider = RxMoyaProvider
let webProvider = RxMoyaProvider
enum ApiService {
case action(pathUrl:String,parameter:ParameterBase)
//加载非标准接口
case loadWebPage(pageUrl:String)
}
extension ApiService: TargetType {
var parameterEncoding: ParameterEncoding {
return JSONEncoding.prettyPrinted
}
/// The method used for parameter encoding.
var baseURL: URL {return URL(string: “接口地址”)!}
var path: String {
switch self {
case .action(let pathName,_):
return strActionPath+pathName
case .loadWebPage(let pathPage):
return pathPage
}
}
var method: Moya.Method {
return .post
}
var parameters: [String: Any]? {
switch self {
case .action(_,let parameter):
return parameter.toString()
case .loadWebPage(_):
return nil
}
}
public var task: Task {
return Task.request
}
public var sampleData: Data {
switch self {
default:
return “Success”.data(using: String.Encoding.utf8)!
}
}
}
直接打成swift类就可以用,只有POST请求,没有写GET因为Alamofire示例里有也简单。