公司要求用swift重构项目,所以决定项目全部用新的框架来写,RxSwift,RxMoya,SwiftJson,Rxcocoa等框架 当然第一次用RxSwift卡了好几天把脑子炸了 ,然后想通了,在做图片上传的时候因为用的RxMoya 网上资料太少 后来去看了demo 然后想想还是写下,还有监听网络请求前 和请求后的因为要做提示控件。网上大部分都是老代码,复制了不走,去看了版本更新才知道方法换了。
mvvm
看下要创建的两个文件
第一步
没写的就是放路径啦。
也许有人会问总不能多个请求地址放多个地方吧。我是几个大模块各创建一个 ,我写app比较考虑后期维护性,没办法这个项目也是2个月内让完成签了生死状。可能讲的不是太全,还请见谅
这个就是请求前与请求后你要做什么处理
放下源码 如果复制发现没有用请看下版本更新
internal final class AccessTokenPlugin: PluginType {
func willSend(_ request: RequestType, target: TargetType) {
}
func didReceive(_ result: Result, target: TargetType) {
}
let HomeApiServi = RxMoyaProvider<HomeApiServicea>(plugins: [AccessTokenPlugin()])
public enum HomeApiServicea {
case getHome(city:String)
}
extension HomeApiServicea: TargetType {
public var baseURL: URL {
return URL(string: URL_DEVELOP)!
}
public var path: String {
switch self {
case .getHome:
return URL_HOME
}
}
public var method: Moya.Method {
switch self {
case .getHome:
return .get
}
}
public var parameters: [String : Any]?
{
switch self {
case .getHome(let cityname):
return ["cityName":cityname]
}
}
public var parameterEncoding: ParameterEncoding {
switch self {
case .getHome:
return URLEncoding.default
}
}
public var task: Task {
switch self {
case .getHome:
return .request
}
}
public var sampleData: Data {
switch self {
case .getHome:
return "".data(using: String.Encoding.utf8)!
}
}
}
下面介绍上传图片 图片上传肯定用post这个就不用多去想了。下面放更改的截图和源码
case let . PictureSave(_,Data):
return .upload(.multipart([MultipartFormData(provider: .data(Data), name: "files",fileName: "pic.jpeg", mimeType: "image/jpeg")]))
还是把viewmodel的也放下 防止有些人不会用
class HomePageViewModel{
func MyCenter(city:String) ->Observable<Response>
{
return HomeApiServi.request(.getHome(city: city)).asObservable()
}
}
个人github https://github.com/sujie0308 2017.6.25 抽出来放下源码吧 因为996 就星期天放吧
有问题加我qq819950208 。Demo:https://github.com/sujie0308/RxMoya