MVVMアーキテクチャは全く新しいです。私はちょうどそれを研究し始めた、これはMVVMアーキテクチャを使用してコードを書く私の最初の試みです。私は、サーバーからコメントをダウンロードし、それらをテーブルビューで表示する必要があります。私の見解はストーリーボードを使って実装されています以下は他のクラスの実装です。MVVMアーキテクチャを使用してデータを取得し、UITableViewを更新する
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?
}
これはネットワークコードがビューモデルであるMVC違いはありませんような気むしろそのViewController。だから私はそれを正しくやっていないかもしれないと思う。あなたが正しい方向に行くかどうか、また何か提案があるかどうかを私に知らせることができれば、私は感謝します。
ありがとうございます。
注:私は非常にプロトコル指向のMVVMの記事に感銘を受けましたが、私の特定の例を開始する方法については考えがありませんでした。 Click here to see the article