MVCについて
・Model
Modelでは、データ処理、ビジネスロジック、データの更新をViewControllerへ通知するなどの役割を担う
・View
Viewでは、表示やユーザーからの入力や出力を行う
・Controller
Controllerでは、ユーザーからの入力によってModelとViewの仲立ちを行う
Model
struct CountModel {
var count: Int = 0
}
view
final class ThirdTableViewCell: UITableViewCell {
@IBOutlet private weak var countLabel: UILabel!
override func prepareForReuse() {
super.prepareForReuse()
countLabel.text = nil
}
func configure(countModel: Int) {
countLabel.text = countModel.description
}
}
Controller
import UIKit
final class InitialViewController: UIViewController {
static func makeFromStoryboard() -> InitialViewController {
let vc = UIStoryboard.initialViewController
return vc
}
@IBAction private func showSecondButton(_ sender: Any) {
Router.showSecond(vc: self)
}
}
import UIKit
final class SecondViewController: UIViewController {
var countModel = CountModel.init(count: 0)
@IBOutlet private weak var countLabel: UILabel! {
didSet{
countLabel.text = countModel.count.description
}
}
static func makeFromStoryboard() -> SecondViewController {
let vc = UIStoryboard.secondViewController
return vc
}
@IBAction private func countUpButton(_ sender: Any) {
print("カウントされました")
countModel.count += 1
countLabel.text = countModel.count.description
}
@IBAction private func showThirdButton(_ sender: Any) {
Router.showThird(vc: self, countModel: countModel)
}
}
import UIKit
final class ThirdViewController: UIViewController {
private let CELL_NIB_NAME = "ThirdTableViewCell"
private let CELL_ID = "ThirdTableViewCell"
var countModel: [CountModel] = []
@IBOutlet private weak var tableView: UITableView! {
didSet {
let cellNIB = UINib(nibName: CELL_NIB_NAME, bundle: nil)
tableView.register(cellNIB, forCellReuseIdentifier: CELL_ID)
tableView.isHidden = true
}
}
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
tableView.isHidden = false
}
static func makeFromStoryboard(countModel: CountModel) -> ThirdViewController {
let vc = UIStoryboard.thirdViewController
vc.countModel.append(countModel)
return vc
}
}
extension ThirdViewController: UITableViewDelegate {
}
extension ThirdViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard
let cell = tableView.dequeueReusableCell(withIdentifier: CELL_ID, for: indexPath) as? ThirdTableViewCell
else {
return UITableViewCell()
}
let count = countModel[indexPath.row].count
cell.configure(countModel: count)
return cell
}
}
Extension
import UIKit
// Storyboardの読み込みを1箇所にまとめる
extension UIStoryboard {
static var initialViewController: InitialViewController {
UIStoryboard.init(name: "Initial", bundle: nil).instantiateInitialViewController() as! InitialViewController
}
static var secondViewController: SecondViewController {
UIStoryboard.init(name: "Second", bundle: nil).instantiateInitialViewController() as! SecondViewController
}
static var thirdViewController: ThirdViewController {
UIStoryboard.init(name: "Third", bundle: nil).instantiateInitialViewController() as! ThirdViewController
}
}
Author And Source
この問題について(MVCについて), 我々は、より多くの情報をここで見つけました https://qiita.com/okadai_5150/items/4cb0a0027f409a2ddd03著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .