ios - 如何在 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。这里的名字,电子邮件,联系方式,性别,由我创建需要发送。那么如何创建?
解决方案
基本上MVVM
是 Model-View 和ViewModel
,所以 view 是 view 和 controller 的组合。而Model是一个负责向View/Controller提供数据的类。并且ViewModel
是一个所有视图业务逻辑都将存在的类。所以在你的情况下,你可以有以下课程
- 用户信息视图控制器
- 用户信息视图模型
- 用户信息模型
现在,当您创建上述三个类时,请务必注意这些类如何相互连接,如下所述。
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 架构的基础。如果您有任何疑问,请告诉我。
推荐阅读
- c++ - 从非模板基类扩展的模板类和覆盖函数参数
- spring-mvc - Kubernetes 中微服务之间的身份验证
- google-chrome - Chrome 操作系统上的 RAM 消失了
- javascript - Mongoose Schema,存储一个可能有也可能没有属性的对象
- reactjs - 如何识别路由是通过history.push还是手动地址更改(react-router)启动的
- r - 在 R 中的隆起建模中识别患者分组
- c# - 如何安排作业在 FPU/AVX 上运行?
- python - 卷积神经网络的输入形状
- string - LUA 计数字符串中的重复字符
- python - 字符之间的匹配空间(行首除外)