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

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

2.View層就是ViewController

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

項目結(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請求"

? ? ? ? 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)容合作請聯(lián)系作者
  • 序言:七十年代末档玻,一起剝皮案震驚了整個濱河市衩侥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌刨晴,老刑警劉巖屉来,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異狈癞,居然都是意外死亡茄靠,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門蝶桶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慨绳,“玉大人,你說我怎么就攤上這事真竖∑暄” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵恢共,是天一觀的道長战秋。 經(jīng)常有香客問我,道長讨韭,這世上最難降的妖魔是什么脂信? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮透硝,結(jié)果婚禮上狰闪,老公的妹妹穿的比我還像新娘。我一直安慰自己蹬铺,他們只是感情好尝哆,可當(dāng)我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著甜攀,像睡著了一般秋泄。 火紅的嫁衣襯著肌膚如雪琐馆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天恒序,我揣著相機與錄音瘦麸,去河邊找鬼。 笑死歧胁,一個胖子當(dāng)著我的面吹牛滋饲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播喊巍,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼屠缭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了崭参?” 一聲冷哼從身側(cè)響起呵曹,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎何暮,沒想到半個月后奄喂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡海洼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年跨新,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坏逢。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡域帐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出词疼,到底是詐尸還是另有隱情俯树,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布贰盗,位于F島的核電站许饿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏舵盈。R本人自食惡果不足惜陋率,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望秽晚。 院中可真熱鬧瓦糟,春花似錦、人聲如沸赴蝇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至劲蜻,卻和暖如春陆淀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背先嬉。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工轧苫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疫蔓。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓含懊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親衅胀。 傳聞我的和親對象是個殘疾皇子岔乔,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹 對...
    cosWriter閱讀 11,101評論 1 32
  • 一、簡介 <<UITableView(或簡單地說拗小,表視圖)的一個實例是用于顯示和編輯分層列出的信息的一種手段 <<...
    無邪8閱讀 10,606評論 3 3
  • *7月8日上午 N:Block :跟一個函數(shù)塊差不多重罪,會對里面所有的內(nèi)容的引用計數(shù)+1樱哼,想要解決就用__block...
    炙冰閱讀 2,486評論 1 14
  • 心情不錯哀九,美美的…晚安、好夢搅幅!
    溫暖的弦暖暖閱讀 213評論 0 0
  • 還在念高中的時候跟閨蜜談起對另一半的期待阅束,總是帶著無限的幻想,無厘頭到現(xiàn)在回想起來還會發(fā)笑茄唐。 我希望他有高大帥氣的...
    等一場相遇閱讀 1,054評論 0 1