Model
View
ViewModel
Model
View
ViewModel
→ BountyViewController
struct BountyInfo{
let name:String
let bounty:Int
var image: UIImage? {
return UIImage(named:"\(name).jpg")
}
init(name: String, bounty:Int) { //초기화시켜줌
self.name = name
self.bounty = bounty
}
}
let bountyInfoList: [BountyInfo] = [BountyInfo(name: "", bounty: ), BountyInfo(),,,]
let bountyInfo = bountyInfoList[index]
vc?.name = bountyInfo.name
vc?.bounty = bountyInfo.bounty
---
return bountyInfoList.count
---
let bountyInfo = bountyInfoList[indexPath.row]
cell.imageView.image = bountyInfo.image
cell.nameLabel.text = bountyInfo.name
cell.bountyLabel.text = "\(bountyInfo.bounty)"
→ DetailViewController
1. BountyInfo 모델 모양의 변수 만들어주기
var bountyInfo: BountyInfo?
vc?.bountyInfo = bountyInfo
//vc?.name = bountyInfo.name
//vc?.bounty = bountyInfo.bounty
→ DetailViewController
func updateUI() {
if let bountyInfo = self.bountyInfo {
imgView.image = bountyInfo.image
nameLabel.text = bountyInfo.name
bountyLabel.text = "\(bountyInfo.bounty)"
}
}
→ BountyViewController
class BountyViewModel { //ViewModel이 Model가지고 있어야함!!!!
let bountyInfoList: [BountyInfo] = [BountyInfo(), BountyInfo(),...]
}
let viewModel = BountyViewModel()
//리스트 숫자 세는 method(closure)
var numofBountyInfoList: Int {
return bountyInfoList.count
}
return viewModel.numofBountyInfoList //viewmodel에서 먼저 접근~
---
//몇번째 index를 넘겨주면 해당하는 데이터를 넘겨주는 Method
func bountyInfo(at index:Int) -> BountyInfo {
return bountyInfoList[index]
}
let bountyInfo = viewModel.bountyInfo(at: index)
let bountyInfo = viewModel.bountyInfo(at: indexPath.row)
→ DetailViewModel
class DetailViewModel{
var bountyInfo: BountyInfo?
}
let viewModel = DetailViewModel()
if let bountyInfo = self.viewModel.bountyInfo {
imgView.image = bountyInfo.image
nameLabel.text = bountyInfo.name
bountyLabel.text = "\(bountyInfo.bounty)"
}
vc?.bountyInfo = bountyInfo //vc의 bountyInfo에 바로 전달xx 이제 viewmodel이 가지고있음
---> DetailViewModel에서 모델을 업데이트시켜주는 function이 필요함
class DetailViewModel{
var bountyInfo: BountyInfo?
func update(model: BountyInfo?) {
bountyInfo = model
}
}
---
vc?.viewModel.update(model: bountyInfo)
let bountyInfo = viewModel.bountyInfo(at:IndexPath.row)
cell.imgView.image = bountyInfo.image
cell.nameLabel.text = bountyInfo.name
cell.bountyLabel.text ="\(bountyInfo.bounty)"
class ListCell: UITableViewCell {
@IBOutlet 뭐시기
@IBOutlet 뭐시기
@IBOutlet 뭐시기
func update(info: BountyInfo) {
imgView.image = info.image
nameLabel.text = info.name
bountyLabel.text ="\(info.bounty)"
}
}
let bountyInfo = viewModel.bountyInfo(at:IndexPath.row)
cell.update(info: bountyInfo)
var sortedList: [BountyInfo] {
let sortedList = bountyInfoList.sorted {prev, next in
return prev.bounty > next.bounty //앞에 있는 바운티가 뒤에 있는 바운티보다는 커야한다
}
return sortedList
}
---
//BountyViewModel 수정
func bountyInfo(at index:Int) -> BountyInfo {
return sortedList[index]
}