swift3.0 MVVM與MVC區(qū)別

本文僅代表個(gè)人看法耕捞,有意見或者不服矾踱,你可以順著網(wǎng)線來(lái)打我!(開玩笑的卢肃, 盡情指點(diǎn)我這個(gè)小彩筆)
看了個(gè)OC版的MVVM的簡(jiǎn)單Demo, 手癢就寫了個(gè)Swift的

MVVM這個(gè)框架的知識(shí)我就不說(shuō)了才顿, 網(wǎng)上一大堆莫湘,但是看起好麻煩。所以我就寫了一個(gè)二者區(qū)別以便更好的理解VF(之前看別人寫關(guān)于MVVM的幅垮, 看起來(lái)好復(fù)雜, 好難尾组, 研究了之后才知道其實(shí)并沒有那么難)

4.png

怎么說(shuō)呢忙芒,MVVM其實(shí)是把ViewController里面的邏輯處理放在ViewModel里面進(jìn)行處理了
viewModel里面的代碼:

import UIKit
import Alamofire
import SwiftyJSON

class MovieViewModel: NSObject {
  // 獲取數(shù)據(jù), 這個(gè)本來(lái)是放在HomeViewController里面的演怎, 現(xiàn)在放在ViewModel了
  func getData(complete:@escaping (_ array: [MovieModel]) -> Void) {
    let url = HEAD_URL + "/v2/movie/coming_soon"
    Alamofire.request(url, method: .post).responseJSON { (response) in

      if let data = response.result.value {
        let json =  JSON(data)
        var array = [MovieModel]()
        let subjects = json["subjects"].arrayValue
        
        for subject in subjects {
          let model = MovieModel()
          model.movieName = subject["title"].stringValue
          model.year = subject["year"].stringValue
          model.imageUrl = subject["images"]["medium"].stringValue
          model.detailUrl = subject["alt"].stringValue
          array.append(model)
        }
        complete(array)
      }
      else {
        print(response.error)
      }

    }
  }
  
// 這里其實(shí)是HomeViewController里面 tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 里面執(zhí)行的代碼, 也是換了位置
  func movieDetailWithPublicModel(movieModel: MovieModel, superController: UIViewController)  {
    let movieVC = MovieViewController()
    movieVC.url = movieModel.detailUrl
    superController.navigationController?.pushViewController(movieVC, animated: true)
  }
}

再看看HomeViewController里面

import UIKit

class HomeViewController: UIViewController {
  
  var array = [MovieModel]()
  var tableView: UITableView!

  override func viewDidLoad() {
      super.viewDidLoad()

    setUI()
  }

  func setUI() {
    self.title = "電影首頁(yè)"
    
    tableView = UITableView(frame: CGRect(x: 0, y: 0, width: width, height: height), style: .plain)
    tableView.delegate = self
    tableView.dataSource = self
    tableView.rowHeight = 80
    self.view.addSubview(tableView)
    tableView.register(UINib(nibName: "MovieCell", bundle: nil), forCellReuseIdentifier: "Cell")

// 調(diào)用ViewModel 的 getData 閉包 獲取數(shù)據(jù)避乏! 對(duì)應(yīng)ViewModel的func getData(complete:@escaping (_ array: [MovieModel]) -> Void) 方法
    let model = MovieViewModel()
    model.getData { [weak self] (dataArray) in
      self!.array = dataArray
      self!.tableView.reloadData()
    }
  }
}

extension HomeViewController: UITableViewDataSource,UITableViewDelegate {
  
  func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return self.array.count
  }
  
  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! MovieCell
    cell.model = array[indexPath.row]
    return cell
  }
  
  func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let movieModel = MovieViewModel()
    movieModel.movieDetailWithPublicModel(movieModel: array[indexPath.row], superController: self)
  }
}

看到這樣有人會(huì)問了爷耀,既然只是代碼換了位置,那MVVM有什么用拍皮?
耦合更低歹叮, 代碼維護(hù)更方便,邏輯代理處理更加容易铆帽! 而且還有MVVM+RAC我還沒研究咆耿,研究了我再告訴你有什么用!
有興趣的可以下Demo看看:https://github.com/BJGX/MVVM-Demo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末爹橱,一起剝皮案震驚了整個(gè)濱河市萨螺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌愧驱,老刑警劉巖慰技,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異组砚,居然都是意外死亡吻商,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門糟红,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)艾帐,“玉大人乌叶,你說(shuō)我怎么就攤上這事∑獍郑” “怎么了准浴?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)揍鸟。 經(jīng)常有香客問我兄裂,道長(zhǎng),這世上最難降的妖魔是什么阳藻? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任晰奖,我火速辦了婚禮,結(jié)果婚禮上腥泥,老公的妹妹穿的比我還像新娘匾南。我一直安慰自己,他們只是感情好蛔外,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布蛆楞。 她就那樣靜靜地躺著,像睡著了一般夹厌。 火紅的嫁衣襯著肌膚如雪豹爹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天矛纹,我揣著相機(jī)與錄音臂聋,去河邊找鬼。 笑死或南,一個(gè)胖子當(dāng)著我的面吹牛孩等,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播采够,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼肄方,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了蹬癌?” 一聲冷哼從身側(cè)響起权她,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎逝薪,沒想到半個(gè)月后伴奥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡翼闽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年拾徙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片感局。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡尼啡,死狀恐怖暂衡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情崖瞭,我是刑警寧澤狂巢,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站书聚,受9級(jí)特大地震影響唧领,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜雌续,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一斩个、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧驯杜,春花似錦受啥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至顽频,卻和暖如春藤肢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背糯景。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工嘁圈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人莺奸。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓丑孩,卻偏偏與公主長(zhǎng)得像冀宴,于是被迫代替她去往敵國(guó)和親灭贷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

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

  • 一略贮、概述 通過(guò)上一篇文章的學(xué)習(xí)甚疟,我們對(duì)關(guān)于MVC的弊端的產(chǎn)生和MVVM中viewModel的職責(zé)及其使用注意事項(xiàng),...
    CoderMikeHe閱讀 28,400評(píng)論 110 353
  • 一逃延、概述 筆者 強(qiáng)烈推薦 大家在閱讀本文之前览妖,還請(qǐng)先移步閱讀?? iOS 關(guān)于MVC和MVVM設(shè)計(jì)模式的那些事 和...
    CoderMikeHe閱讀 15,608評(píng)論 28 147
  • 2017.02.22 可以練習(xí),每當(dāng)這個(gè)時(shí)候揽祥,腦袋就犯困讽膏,我這腦袋真是神奇呀,一說(shuō)讓你做事情拄丰,你就犯困府树,你可不要太...
    Carden閱讀 1,346評(píng)論 0 1
  • 好久沒有更文俐末,或許更多的時(shí)候,我是把這個(gè)地方當(dāng)做自己的舞臺(tái)了奄侠,而不是自己的自留地卓箫。總想著上臺(tái)垄潮,所以覺得自己不夠好的...
    黃值子閱讀 514評(píng)論 5 6
  • 就目前的科學(xué)所知烹卒,人類是地球上最智慧的生物,也是最高級(jí)的動(dòng)物弯洗。作為人旅急,我們贊美人這一生物的偉大。人的思維涂召,...
    海利大人閱讀 321評(píng)論 0 1