【发布时间】:2016-07-18 18:59:54
【问题描述】:
我对 MVVM 架构完全陌生。我刚开始研究它,这是我第一次尝试使用 MVVM 架构编写代码。我需要从服务器下载 cmets 并将它们显示在表格视图中。我的视图是使用故事板实现的 下面是我对其他类的实现。
SECommentsViewController.swift
import UIKit
class SECommentsViewController: SEViewController, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
var mediaObject: PFObject?
var viewModel = SECommentsViewModel()
override func viewDidLoad() {
super.viewDidLoad()
viewModel.fetchCommentsForMedia(mediaObject) { (comments, error) in
self.tableView.reloadData()
}
}
// MARK: - UITableViewDataSource
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return viewModel.comments.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("SECommentCell", forIndexPath: indexPath) as! SECommentCell
let object = viewModel.comments[indexPath.row]
if let username = (object.objectForKey("fromUser") as? PFUser)?.objectForKey("userId") as? String {
cell.usernameButton.setTitle(username, forState: UIControlState.Normal)
}
if let profileImageURLString = ((object.objectForKey("fromUser") as? PFUser)?.objectForKey("image") as? PFFile)?.url {
if let profileImageURL = NSURL(string: profileImageURLString) {
cell.profileImageView.sd_setImageWithURL(profileImageURL)
}
}
if let commentText = object.objectForKey("text") as? String {
cell.commentLabel.text = commentText
}
return cell
}
}
SECommentsViewModel.swift
import UIKit
class SECommentsViewModel: NSObject {
var comments = [PFObject]()
func fetchCommentsForMedia(mediaObject: PFObject?, completion: (comments: [PFObject]?, error: NSError?) -> Void) {
if let media = mediaObject {
let commentsQuery = PFQuery(className: "SEActivity")
commentsQuery.whereKey("image", equalTo: media)
commentsQuery.whereKey("type", equalTo: "comment")
commentsQuery.findObjectsInBackgroundWithBlock({ (objects: [PFObject]?, error: NSError?) in
if let theObjects = objects {
self.comments = theObjects
}
completion(comments: objects, error: error)
})
}
else {
completion(comments: nil, error: nil)
}
}
}
SECommentCell.swift
import UIKit
class SECommentCell: UITableViewCell {
@IBOutlet weak var profileImageView: UIImageView!
@IBOutlet weak var usernameButton: UIButton!
@IBOutlet weak var commentLabel: UILabel!
var commentUser: PFUser?
}
我觉得这与网络代码在 ViewModel 而不是 ViewController 中的 MVC 没有什么不同。所以我想我可能做得不对。如果您能告诉我我的方向是否正确以及是否有任何建议,我将不胜感激。
提前谢谢你。
注意:关于面向协议的 MVVM 的文章给我留下了深刻的印象,但不知道如何开始我的特定示例。 Click here to see the article
【问题讨论】:
标签: ios swift uitableview model-view-controller mvvm