как конвертировать в mvc?
это код, выполненный в mvvm.
модель: -
class EventModel: NSObject {
var name :String!
var location:String!
var imageurl :String!
var date:String!
var place:String!
var id:String!
init?(dictionary :JSONDictionary) {
guard let name = dictionary["name"] as? String,
let id = dictionary["id"] as? String,
let location = dictionary["location"] as? String,
let imageurl = dictionary["imageurl"] as? String,
let date = dictionary["date"] as? String,
let place = dictionary["place"] as? String else {
return
}
self.name = name
self.location = location
self.id = id
self.imageurl = imageurl
self.place = place
self.date = date
}
}
модель данных источника: -
class EventDataSourceModel: NSObject {
var dataListArray:Array<EventModel>? = []
init(array :Array<[String:Any]>?) {
super.init()
var newArray:Array<[String:Any]> = []
if array == nil{
newArray = self.getJsonDataStored2()
}
else{
newArray = array!
}
var datalist:Array<EventModel> = []
for dict in newArray{
let model = EventModel(dictionary: dict)
datalist.append(model!)
}
self.dataListArray = datalist
}
}
typealias dummyDataSource2 = EventDataSourceModel
extension dummyDataSource2{
func getJsonDataStored2() ->Array<Dictionary<String,String>>{
let jsonArray = [["id":"201","name":"Dosa Fest","imageurl":"","location":"Doha,Qatar","date":"Jan 2018","place":"Shiraz Garden"],["id":"202","name":"Organic Vegan Fest","imageurl":"","location":"Doha,Qatar","date":"15 Jan 2018 30 Jan 2018","place":"Evergreen Organics"],["id":"203","name":"Food Of Life Time","imageurl":"","location":"Doha,Qatar","date":"Jan 2018","place":"Turkey Central"],["id":"204","name":"Tea Time","imageurl":"","location":"Doha,Qatar","date":"Jan 2018","place":"Doha Food Mall"],["id":"205","name":"Dosa Fest","imageurl":"","location":"Doha,Qatar","date":"Jan 2018","place":"Shiraz Garden"],["id":"206","name":"Organic Vegan Fest","imageurl":"","location":"Doha,Qatar","date":"15 Jan 2018 30 Jan 2018","place":"Evergreen Organics"],["id":"207","name":"Food Of Life Time","imageurl":"","location":"Doha,Qatar","date":"Jan 2018","place":"Turkey Central"],["id":"208","name":"Tea Time","imageurl":"","location":"Doha,Qatar","date":"Jan 2018","place":"Doha Food Mall"]] as Array<Dictionary<String,String>>
return jsonArray
}
}
viewmodel: _
class EventViewModel: NSObject {
var datasourceModel:EventDataSourceModel
var id:String?
var filteredListArray:Array<EventModel>? = []
init(withdatasource newDatasourceModel: EventDataSourceModel) {
datasourceModel = newDatasourceModel
}
func datafordisplay(atindex indexPath: IndexPath) -> EventModel{
return datasourceModel.dataListArray![indexPath.row]
}
func numberOfRowsInSection(section:Int) -> Int {
return (datasourceModel.dataListArray?.count)!
}
}
viewcontroller: -
class EventViewController: UIViewController ,UITableViewDataSource{
@IBOutlet private weak var tableView: UITableView!
private var eventViewModel :EventViewModel!
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?, withViewModel viewModel:EventViewModel) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
eventViewModel = viewModel
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
self.tableView .reloadData()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return eventViewModel.numberOfRowsInSection(section: section)
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let identifier = "eventcell"
var cell: EventCell! = tableView.dequeueReusableCell(withIdentifier: identifier) as? EventCell
if cell == nil {
tableView.register(UINib(nibName: "EventCell", bundle: nil), forCellReuseIdentifier: identifier)
cell = tableView.dequeueReusableCell(withIdentifier: identifier) as? EventCell
}
cell.setEventData(events: eventViewModel.datafordisplay(atindex: indexPath))
return cell
}
}
ячейка просмотра таблицы: -
class EventCell: UITableViewCell {
@IBOutlet weak var name: UILabel!
@IBOutlet weak var cellview: UIView!
override func awakeFromNib() {
super.awakeFromNib()
}
func setEventData(events:QM_EventModel)
{
self.name.text = events.name
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}
Как это сделать в mvc.? Я в замешательстве, потому что многие сайты, связанные с mvc, показывают разный стиль. Цель та же, но метод написания различий в коде. Так что это создает путаницу для начинающих. Выше приведен код в mmvm. Так что все изменения, необходимые для внесения в mvc.