首页 > 解决方案 > 如何在 swift 中从 api 生成模型

问题描述

我对如何使用 swift 在 mvvm 中创建模型感到困惑。

我有:-名称-作为文本字段联系人不作为文本字段电子邮件-作为文本字段

性别 - 男性和女性(这里的男性和女性是一个按钮,这意味着这里创建了 2 个按钮。)

由-我自己、父母、朋友创建(这里有 3 个按钮)

在这里,我只能从 Gender 中选择一个选项,从创建者中选择一个选项。

如何为它创建模型。

 enum Gendeer:Int{
    case Male = 0
    case Female = 1
    }
enum Createdwhom:Int{
case myself = 0
case parents = 1
case friends = 2
}

在我的 UIViewController.xib 我有: -

这是屏幕截图

我的代码:-数据源模型:-

class CF_Page1DataSourceModel: NSObject {

    var dataListArray:Array<CF_Page1Model>? = []

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

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

        }

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

            let model = CF_Page1Model(dictionary: dict)

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

}

typealias dummyDataSource11 = CF_Page1DataSourceModel
extension dummyDataSource11{

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

        let jsonArray = [["name":"dddd","gender":"0"],["name":"dddd","gender":"1"]] as Array<Dictionary<String,String>>

        return jsonArray
    }

}

视图模型:-

class CF_Page1ViewModel: NSObject {
    var datasourceModel:CF_Page1DataSourceModel


    init(withdatasource  newDatasourceModel:CF_Page1DataSourceModel) {
        datasourceModel = newDatasourceModel
        print(datasourceModel.dataListArray)
    }


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

    }

    func numberOfRowsInSection(section:Int) -> Int {

        return (datasourceModel.dataListArray?.count)!
    }




}

视图控制器:-

class CF_Page1ViewController: UIViewController {

    @IBOutlet weak var label: UILabel!


    var greeting:String!
    var color:UIColor!

    var itemindex:Int = 0

    private var page1ViewModel :CF_Page1ViewModel!

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

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

        page1ViewModel  = viewModel
    }


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



    override func viewDidLoad() {
        super.viewDidLoad()

        //  self.view.backgroundColor = color
        //  self.label.text = greeting




    }
}

模型:-

class CF_Page1Model: NSObject {

    var name:String!
    var gender: Gender?


    init?(dictionary :JSONDictionary) {

        guard
            let name = dictionary["name"] as? String,
          let gender = dictionary["gender"] as? String


            else {
                return

        }

        self.name = name

    }


}

enum Gender: Int {
    case Male = 0
    case Female = 1


     print(Gender.male.rawvalue)


    var name: String {
        get { return String(describing: self) }
    }


}




here this is the code which i done ,but i am confused here as i mention in datasourcemodel:-

 let jsonArray = [["name":"dddd","gender":"0"],["name":"dddd","gender":"1"]] as Array<Dictionary<String,String>>

在这里我很困惑,我需要以这样的方式获取数据男性,女性从关键性别和我自己,朋友,父母从关键创建谁。这里如何给这里。这意味着我需要从 api 获取值然后它应该在我添加我的屏幕截图时显示。

这里我有提交按钮。所以当我点击提交按钮时,它应该发送名称文本、电子邮件文本、联系人文本、性别和 createdwhom。在这个性别和 createdwhom 应该使用枚举。最后它应该发送到 api。

那么如何创建模型以及需要进行哪些更改。

同样的方式如何为它创建JSON。这里的名字,电子邮件,联系方式,性别,由我创建需要发送。那么如何创建?

标签: iosswift3

解决方案


基本上MVVM是 Model-View 和ViewModel,所以 view 是 view 和 controller 的组合。而Model是一个负责向View/Controller提供数据的类。并且ViewModel是一个所有视图业务逻辑都将存在的类。所以在你的情况下,你可以有以下课程

  1. 用户信息视图控制器
  2. 用户信息视图模型
  3. 用户信息模型

现在,当您创建上述三个类时,请务必注意这些类如何相互连接,如下所述。

UserInfoViewController -> UserInfoViewModel -> UserInfoModel

因此,您的 UserInfoViewController 类包含 UserInfoViewModel 对象,而您的 UserInfoViewModel 包含 UserInfoModel 对象。MVVM 必须使用此结构,如果您不遵循此结构,则说明您没有正确使用 MVVM。

在您的情况下如何工作:

UserInfoViewController - 将 UI 呈现给用户。并持有 UserInfoViewModel 对象。

UserInfoViewModel - 处理 UserInfoViewController 视图的所有业务逻辑,例如在从 UserInfoViewController 输入用户详细信息按提交后,UserInfoViewController 的 UserInfoViewModel 对象将所有数据发送到此 UserInfoViewModel,它可以创建 JSON 结构以供进一步处理。

UserInfoModel - UserInfoViewModel 持有此类对象。它负责从/到任何地方获取/上传/发送或获取数据。在您的情况下,例如在 UserInfoViewModel 创建 JSON 之后,它可以将数据发送到此类,并且此类进一步发送或保存用户信息 JSON 数据。

因此,这是 MVVM 架构的基础。如果您有任何疑问,请告诉我。


推荐阅读