基于協(xié)議的MVVM模式的簡(jiǎn)單實(shí)現(xiàn)

1.ViewModel層,就是View和Model層的粘合劑

2.View層就是ViewController

3.Model層就是用于處理數(shù)據(jù)的層

項(xiàng)目結(jié)構(gòu)

一,model?

//

//? WKModel.swift

//? swift-mvvm

//

//? Created by Admin on 2019/2/11.

//? Copyright ? 2019 Admin. All rights reserved.

//

import . Foundation

import SwiftyJSON

protocol WKModelDelegete {

? ? func getDataError(error:String)

? ? func getDataSucess(items:Array)

}

class WKModel {

? ? var delegate :WKModelDelegete!

? ? init(delegate:WKModelDelegete) {

? ? ? ? self.delegate=delegate

? ? }

? ? func getServiceData(){

?? ? ? ? let? dic = ["key":"c73b082b0c150b3bcba2cea1b96a8922"]

? ? ? ? AFNetWorkingUtil.shared.request(requestType: .GET, urlString:"/dream/category", parameters: dicas[String:AnyObject], requestSuccess: { (response)in

? ? ? ? ? ? var itmes:Array= [String]()

? ? ? ? ? ? let json =JSON(response!)


? ? ? ? ? ? let d = json["result"].array!.count

? ? ? ? ? ? if d>0{

? ? ? ? ? ? ? ? let list:Array = json["result"].array!

? ? ? ? ? ? ? ? for item in list {

? ? ? ? ? ? ? ? ? ? itmes.append(item["name"].string!)

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? self.delegate.getDataSucess(items: itmes)

? ? ? ? ? ? }




? ? ? ? }) { (error)in

? ? ? ? ? ? self.delegate.getDataError(error:"服務(wù)器異常")

? ? ? ? }


? ? }

}

二,controller

//

//? WKMVVMDemo.swift

//? swift-mvvm

//

//? Created by Admin on 2019/2/11.

//? Copyright ? 2019 Admin. All rights reserved.

//

importToast_Swift

import UIKit

class WKMVVMDemo: UITableViewController,WKView {

? ? var items:Array= [String]()

? ? override func viewDidLoad() {

? ? ? ? super.viewDidLoad()

? ? ? ? self.tableView.delegate = self

? ? ? ? self.tableView.dataSource = self

? ? ? ? self.title="Get請(qǐng)求"

? ? ? ? let vm =WKViewModel(view:self)

? ? ? ? vm.getServiceData()

? ? }

? ? func showProgress() {

? ? ? ? MBProgressHUD.showAdded(to:self.view, animated:true)

? ? }

? ? funchideProgress() {

? ? ? ? MBProgressHUD.hide(for:self.view, animated:true)

? ? }

? ? func getWKData(items:Array) {

? ? ? ? self.items= items

? ? ? ? self.tableView.reloadData()

? ? }

? ? override func tableView(_tableView:UITableView, numberOfRowsInSection section:Int) ->Int{

? ? ? ? return items.count

? ? }

? ? override func tableView(_tableView:UITableView, cellForRowAt indexPath:IndexPath) ->UITableViewCell{

? ? ? ? let cell =UITableViewCell()

? ? ? ? cell.textLabel?.text=items[indexPath.row]

? ? ? ? returncell

? ? }

? ? override? func tableView(_tableView:UITableView, didSelectRowAt indexPath:IndexPath) {

? ? ? ? self.view.makeToast(items[indexPath.row])

? ? }

}

三,viewModel

//

//? WKViewModel.swift

//? swift-mvvm

//

//? Created by Admin on 2019/2/11.

//? Copyright ? 2019 Admin. All rights reserved.

//

importFoundation

class WKViewModel:WKModelDelegete{

? ? // model

? ? varmodel:WKModel!

? ? //view

? ? var view :WKView


? ? init(view:WKView) {

? ? ? ? self.view= view

? ? ? ? self.model=WKModel(delegate:self)

? ? }

? ? func getServiceData() {

? ? ? ? self.view.showProgress()

? ? ? ? self.model.getServiceData()

? ? }

? ? func getDataError(error:String) {

? ? ? ? self.view.hideProgress()

? ? }

? ? func getDataSucess(items:Array) {

? ? ? ? self.view.hideProgress()

? ? ? ? self.view.getWKData(items: items)

? ? }


}

四,afnetwork的封裝

//

//? AFNetWorkingUtil.swift

//? swift-afnetwork

//

//? Created by Admin on 2019/2/11.

//? Copyright ? 2019 Admin. All rights reserved.

//

import UIKit

enumHTTPRequestType {

? ? caseGET

? ? casePOST

}

class AFNetWorkingUtil:AFHTTPSessionManager {

? ? /// 基礎(chǔ)url

? ? let BASE_URL = "http://v.juhe.cn"

? ? //單例

? ? staticletshared:AFNetWorkingUtil= {

? ? ? ? letinstance =AFNetWorkingUtil()

? ? ? ? instance.requestSerializer = AFJSONRequestSerializer()

? ? ? ? instance.responseSerializer = AFHTTPResponseSerializer()

? ? ? ? instance.requestSerializer.setValue("application/json,text/html", forHTTPHeaderField:"Accept")

? ? ? ? instance.requestSerializer.setValue("application/json,charset=utf-8", forHTTPHeaderField: "Content-Type")

? ? ? ? returninstance

? ? }()


? ? funcgetBaseUrl(baseUrl:String) ->String{

? ? ? ? returnBASE_URL

? ? }

? ? funcrequest(requestType:HTTPRequestType,urlString:String,parameters:[String:AnyObject]?,requestSuccess:@escaping(AnyObject?)->(),requestFailure:@escaping(_error:Error)->()){

? ? ? ? let success = {

? ? ? ? ? ? (tasks:URLSessionDataTask,json:Any) ->()in requestSuccess(json as AnyObject?)

? ? ? ? }

? ? ? ? let failure = {

? ? ? ? ? ? (tasks:URLSessionDataTask?,error:Error) ->()in requestFailure(error)

? ? ? ? }

? ? ? ? if requestType == .GET{

? ? ? ? ? ? get(getBaseUrl(baseUrl:BASE_URL)+urlString,parameters: parameters,progress:nil, success: success, failure: failure)

? ? ? ? }else{

? ? ? ? ? ? self.post(urlString, parameters: parameters, progress:nil, success: success, failure: failure)

? ? ? ? }

? ? }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,621評(píng)論 1 32
  • 一、簡(jiǎn)介 <<UITableView(或簡(jiǎn)單地說(shuō),表視圖)的一個(gè)實(shí)例是用于顯示和編輯分層列出的信息的一種手段 <<...
    無(wú)邪8閱讀 10,958評(píng)論 3 3
  • *7月8日上午 N:Block :跟一個(gè)函數(shù)塊差不多,會(huì)對(duì)里面所有的內(nèi)容的引用計(jì)數(shù)+1,想要解決就用__block...
    炙冰閱讀 2,713評(píng)論 1 14
  • 心情不錯(cuò),美美的…晚安、好夢(mèng)!
    溫暖的弦暖暖閱讀 301評(píng)論 0 0
  • 還在念高中的時(shí)候跟閨蜜談起對(duì)另一半的期待,總是帶著無(wú)限的幻想,無(wú)厘頭到現(xiàn)在回想起來(lái)還會(huì)發(fā)笑。 我希望他有高大帥氣的...
    等一場(chǎng)相遇閱讀 1,080評(píng)論 0 1

友情鏈接更多精彩內(nèi)容