gpt4 book ai didi

ios - 如何在 swift 中使用 mvvm 合并两个数据源模型

转载 作者:行者123 更新时间:2023-11-30 11:04:46 24 4
gpt4 key购买 nike

我有两个数据源模型。我在 mvvm 中进行。

我的数据源模型如下。

class QuestionDataSourceModel: NSObject {

var dataListArray:Array<QuestionListModel>? = []

var list:Array<OptionsModel>? = []


init(array :Array<[String:Any]>?) {
super.init()



var newArray:Array<[String:Any]> = []
if array == nil{

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

}

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

let model = QuestionListModel(dictionary: dict)

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

}

以上是第一个数据源模型。

下一个数据源模型如下。

class DummyDataSourceModel: NSObject {
var dataListArray:Array<DummyDataModel>? = []

var list:Array<DummyDataModel>? = []


init(array :Array<[String:Any]>?) {
super.init()



var newArray:Array<[String:Any]> = []
if array == nil{

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

}

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

let model = DummyDataModel(dictionary: dict)

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

}

在我的 View Controller 中:-

 questionViewModel.loadData { (isSuccess) in


if(isSuccess == true)
{
let sec = self.questionViewModel.numberOfSections()
for _ in 0..<sec
{


self.questionViewModel.answers1.add("")
self.questionViewModel.questions1.add("")
self.questionViewModel.questionlist1.add("")


}
//questionViewModel.numberOfSections()


self.activityindicator.stopAnimating()
self.activityindicator.isHidden = true
self.tableview.refreshControl = refreshControl
self.tableview .allowsMultipleSelection = false

self.tableview.reloadData()


// self.questionViewModel.loadData2{ (isSuccess) in

self.dummyDataViewModel.loadData1{ (isSuccess) in


if(isSuccess == true)
{

print(self.questionViewModel.datasourceModel.dataListArray?.count)
self.questionViewModel.totaldata()
self.tableview2.allowsMultipleSelection = false
self.tableview2.reloadData()


}
else{

self.viewDidLoad()

}


}



}
else{


self.activityindicator.stopAnimating()

self.activityindicator.isHidden = true


let controller = UIAlertController(title: "No Internet Detected", message: "This app requires an Internet connection", preferredStyle: .alert)
// Create the actions
let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default) {
UIAlertAction in
NSLog("OK Pressed")


self.viewDidLoad()


}
controller.addAction(okAction)


self.present(controller, animated: true, completion: nil)

}
}

我的问题 View 模型:-

 func loadFromWebserviceData(completion :@escaping (QuestionDataSourceModel?) -> ()){


Alamofire.request("http://www.example.com").validate(statusCode: 200..<300).validate(contentType: ["application/json"]).responseJSON{ response in

let status = response.response?.statusCode
print("STATUS \(status)")

print(response)

switch response.result{

case .success(let data):
print("success",data)

let result = response.result

print(result)

if let wholedata = result.value as? [String:Any]{

print(wholedata)


if let data = wholedata["data"] as? Array<[String:Any]>{

print(data)
print(response)

for question in data {

let typebutton = question["button_type"] as? String
print(typebutton)
self.type = typebutton

let options = question["options"] as! [String]

// self.dataListArray1 = [options]
self.tableArray.append(options)
// self.savedataforoptions(completion: <#T##(NH_OptionslistDataSourceModel?) -> ()#>)

self.no = options.count
}

print(self.tableArray)


let newDataSource:QuestionDataSourceModel = QuestionDataSourceModel(array: data)

completion(newDataSource)

}

}


case .failure(let encodingError ):
print(encodingError)

// if response.response?.statusCode == 404{

print(encodingError.localizedDescription)

completion(nil)

}

}}

func loadData(completion :@escaping (_ isSucess:Bool) -> ()){


loadFromWebserviceData { (newDataSourceModel) in

if(newDataSourceModel != nil)
{

self.datasourceModel = newDataSourceModel!
completion(true)

}
else{
completion(false)
}
}
}

我的 dummyViewModel 如下:-

 func loadFromDummyData(completion :@escaping (DummyDataSourceModel?) -> ()){


if let path = Bundle.main.path(forResource: "jsonData", ofType: "json") {
do {
let jsonData = try NSData(contentsOfFile: path, options: NSData.ReadingOptions.mappedIfSafe)

do {
let jsonResult: NSDictionary = try JSONSerialization.jsonObject(with: jsonData as Data, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSDictionary


if let people = jsonResult["data"] as? Array<[String:Any]> {
// self.dict = people



for person in people {

let options = person["options"] as! [String]


self.tableArray.append(options)



let name = person ["question"] as! String

self.tableArray.append(options)
}
let newDataSource:DummyDataSourceModel = DummyDataSourceModel(array: people)

completion(newDataSource)


}



} catch {}
} catch {}
}

}

func loadData1(completion :@escaping (_ isSucess:Bool) -> ()){


loadFromDummyData{ (newDataSourceModel) in

if(newDataSourceModel != nil)
{

self.datasourceModel = newDataSourceModel!
completion(true)

}
else{
completion(false)
}
}
}

现在我需要合并这两个数据源模型。

我正在使用tableview来显示数据。

所以首先我需要显示来自 JSON 的数据。然后下面我需要显示来自 json.file 的数据。那么如何合并这两个数据源模型。

首先,来自 JSON 的数据有 10 个部分。在json.file中它有3个部分。总共13个部分。所以我需要在表格 View 中一起显示13个部分。怎么做?

这是 json.file 数据:-

{
"data":[
{
"question": "Gender",
"options": ["Male","Female"],
"button_type":"2"

},
{
"question": "How old are you",
"options": ["Under 18","Age 18 to 24","Age 25 to 40","Age 41 to 60","Above 60"],
"button_type":"2"
},

{
"button_type":"2",
"question": "I am filling the Questionnaire for?",
"options": ["Myself","Mychild","Partner","Others"]

}
]


}

与 api 中的 JSON 格式相同。

{
"data":[
{
"question": "Gender",
"options": ["Male","Female"],
"button_type":"2"

},
{
"question": "How old are you",
"options": ["Under 18","Age 18 to 24","Age 25 to 40","Age 41 to 60","Above 60"],
"button_type":"2"
},

{
"button_type":"2",
"question": "I am filling the Questionnaire for?",
"options": ["Myself","Mychild","Partner","Others"]

}
]


}

最佳答案

class OptionsModel: NSObject {
var options: [String]?
var question: String?
var button_type: String?
}


class OptionsViewModel: NSObject {
var optionList: Array<OptionsModel>?

func callApi() {
yourApiCall() { webResponseArray in
for res in webResponseArray {
let model = OptionsModel(json: res)
if optionList == nil {
optionList = [OptionsModel]()//Initialize Array if not initialized
}
optionList.append(model)// You are appending Option getting from web Api Response
}
//After Completely fetching all models from webResponseArray you should load Data from Local JSON
loadLocalJSON()//After loading Data from Web You are loading Data from local JSON.
}
}
func loadLocalJSON() {
let localJsonArray = someMethodToLoadJsonFromLocalFileAndReturnsJSON()
for json in localJsonArray {
let model = OptionsModel(json: json)
if optionList == nil {
optionList = [OptionsModel]()//Initialize Array if not initialized
}
optionList.append(model)// You are appending Option getting from Local JSON
}
//Now you have a single Array containing all local and remote option models.
}
}

关于ios - 如何在 swift 中使用 mvvm 合并两个数据源模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52847595/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com