как проверить модель с помощью mvvm в swift3 - PullRequest
0 голосов
/ 02 мая 2018
how to init the model 

моя модель: -

class CartModel: NSObject {

    var restaurantname :String!

    init?(dictionary :JSONDictionary) {

        guard let name = dictionary["name"] as? String  else {
            return
        }

        self.restaurantname = name

    }

}

моя viewmodel: -

class ChartViewModel: NSObject {


    var datasourceModel:ChartDataSourceModel

    init(withdatasource  newDatasourceModel: ChartDataSourceModel) {
        datasourceModel = newDatasourceModel
    }


    func datafordisplay(atindex indexPath: IndexPath) -> M_CartModel{
        return  datasourceModel.dataListArray![indexPath.row]

    }

    func numberOfRowsInSection(section:Int) -> Int {

        return (datasourceModel.dataListArray?.count)!
    }




}

моя модель источника данных: -

class ChartDataSourceModel: NSObject {
    var dataListArray:Array<CartModel>? = []


    init(array :Array<[String:Any]>?) {
        super.init()
        var newArray:Array<[String:Any]> = []
        if array == nil{

            newArray = self.getJsonDataStored22()
        }
        else{
            newArray = array!

        }

        var datalist:Array<CartModel> = []
        for dict in newArray{

            let model = CartModel(dictionary: dict)

            datalist.append(model!)
        }
        self.dataListArray = datalist
    }



}

typealias dummyDataSource22 =  ChartDataSourceModel
extension dummyDataSource22{

    func getJsonDataStored22() ->Array<Dictionary<String,String>>{

        let jsonArray = [["name":"Dosa Fest"],["name":"Organic Vegan Fest"],["name":"Food Of Life Time"],["name":"Tea Time","imageurl":"","location":"Doha,Qatar","date":"Jan 2018","place":"Doha Food Mall"],["name":"Dosa Fest"],["name":"Organic Vegan Fest"],["name":"Food Of Life Time"],["name":"Tea Time"]] as Array<Dictionary<String,String>>

        return jsonArray
    }




my viewcontroller:-

class ChartViewController: UIViewController ,UITableViewDataSource,UITabBarDelegate{

    @IBOutlet private weak var tableView: UITableView!

    private var chartViewModel :ChartViewModel!

    init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?, withViewModel viewModel:ChartViewModel) {

        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)

        chartViewModel = viewModel
    }



    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }


    override func viewDidLoad() {
        super.viewDidLoad()

        self.tableView.backgroundColor = UIColor(red: 0.93, green: 0.86, blue: 1, alpha:1.0)


        tableView.dataSource = self



        self.tableView .reloadData()

        // Do any additional setup after loading the view.
    }




    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return chartViewModel.numberOfRowsInSection(section: section)
    }



    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


        let identifier = "cell"
        var cell: ChartCell! = tableView.dequeueReusableCell(withIdentifier: identifier) as? ChartCell

        if cell == nil {
            tableView.register(UINib(nibName: "ChartCell", bundle: nil), forCellReuseIdentifier: identifier)
            cell = tableView.dequeueReusableCell(withIdentifier: identifier) as? ChartCell
        }

        cell.setEventData(charts: chartViewModel.datafordisplay(atindex: indexPath))


               return cell
    }


}








}

В этом viewcontroller я использовал кнопку «Добавить». Так что, нажимая кнопку «Добавить», она должна отобразить имя на другом экране. Так как это сделать ..

моя новобрачная: -

class newModel: NSObject {
//here how to init the cartmodel......
}

Как отобразить имя в newview. Как это сделать. Мне нужно проверить, есть ли эта модель. Мне нужно установить как необязательный.

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Ваш ответ зависит от того, что такое JSONDictionary, откуда вы его берете, и от объема, который вам требуется для вашей модели, но основы

let dict: [JSONDictionary] = [[
     "name": "robbie"
]]

let viewModel = CartModel(dictionary: dict)

Для сбойного инициализатора вы должны проверить значение и, если оно неверно, вернуть nil

init?(dictionary :JSONDictionary) {
    guard let name = dictionary["name"] as? String else {
        return nil
    }
    self.restaurantname = name

}

с этим вы можете использовать:

if let model = CartModel(dictionary: dict) { // is optional
    // success
} 
0 голосов
/ 02 мая 2018
    let jsonArray = [["name":"Dosa Fest"],["name":"Organic Vegan Fest"],["name":"Food Of Life Time"],["name":"Tea Time","imageurl":"","location":"Doha,Qatar","date":"Jan 2018","place":"Doha Food Mall"],["name":"Dosa Fest"],["name":"Organic Vegan Fest"],["name":"Food Of Life Time"],["name":"Tea Time"]] as Array<Dictionary<String,String>>

class CartModel: NSObject {

    var restaurantname :String!

    init?(dictionary :Dictionary<String,String>) {
        self.restaurantname = dictionary["name"] ?? ""

    }

}
var arrayModel : [CartModel] {

    var models : [CartModel] = []

    for json in jsonArray {
        let model = CartModel(dictionary: json)!
        models.append(model)
    }
    return models
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...