ios - 为什么一个 bname 值在快速解析时在 tableview 中显示其 paramName 计数时间?
问题描述
我的 JSON:
{
"id": "70",
"bname": "Municipal Corporation - Water",
"bcategoryname": "Water",
"bcustomerparms": "[{\"paramName\":\"Consumer Number\",\"dataType\":\"NUMERIC\",\"optional\":\"false\",\"minLength\":\"1\",\"maxLength\":\"10\"},
{\"paramName\":\"Mobile Number\",\"dataType\":\"NUMERIC\",\"optional\":\"false\",\"minLength\":\"10\",\"maxLength\":\"10\"},
{\"paramName\":\"Email . Id\",\"dataType\":\"ALPHANUMERIC\",\"optional\":\"false\",\"minLength\":\"5\",\"maxLength\":\"100\"}]",
}
"id": "68",
"bname": "Municipal Corporation - 12",
"bcategoryname": "Water",
"bcustomerparms": "[{\"paramName\":\"K No\",\"dataType\":\"ALPHANUMERIC\",\"optional\":\"false\",\"minLength\":\"7\",\"maxLength\":\"20\"}]",
}
在这里,我Municipal Corporation - Water
在 tableview 中获得了 3 次,我需要它一次,并且它的 paramName 在 waterParamArray 中应该是 3。同样,如果在 waterParamArray 中有一个 paramName,则有一个值。
这是代码:
do{
let jsonObj = try JSONSerialization.jsonObject(with: respData, options: .allowFragments) as! [String: Any]
//print("the all make payment json is \(jsonObj)")
let billerdetailsArray = jsonObj["billerdetails"] as! [[String: Any]]
for billerdetail in billerdetailsArray {
self.categoryName = billerdetail["bcategoryname"] as? String
let customrParams = billerdetail["bcustomerparms"] as! String
let res = try JSONSerialization.jsonObject(with:Data(customrParams.utf8)) as! [[String: Any]]
for item in res {
self.paramName = item["paramName"] as? String
if self.categoryName == "Water"{
let bName = billerdetail["bname"] as? String
self.waterArray.append(bName ?? "")
self.waterParamArray.append(self.paramName ?? "")
}
if self.categoryName == "Electricity"{
let bName = billerdetail["bname"] as? String
self.electricityArray.append(bName ?? "")
self.electrictyParamArray.append(self.paramName ?? "")
}
}
}
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
guard let category = category else {return 0}
switch category {
case .electricity: return electricityArray.count
case .water: return waterArray.count
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! PaymentTableViewCell
guard let category = category else {return cell}
switch category {
case .electricity: cell.pamntTypeLabel.text = electricityArray[indexPath.row]
case .water: cell.pamntTypeLabel.text = waterArray[indexPath.row]
}
return cell
}
这里 textFieldList 是 nextVCs var textFieldList = [String]()
,因此它包含多少个 paramName 将返回该计数
但一直都textFieldList
包含单一值,为什么?甚至 json 包含三个 paramNames
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let cell = tableView.cellForRow(at: indexPath) as? PaymentTableViewCell
if let nextViewController = self.storyboard?.instantiateViewController(withIdentifier: "TextFiViewController") as? TextFiViewController
{
switch category {
case .electricity?: nextViewController.textFieldList = [electrictyParamArray[indexPath.row]]//electrictyParamArray[indexPath.row]
case .water?: nextViewController.textFieldList = [waterParamArray[indexPath.row]]
case .none:
print("in didselect switch")
}
self.navigationController?.pushViewController(nextViewController, animated: true)
}
}
}
请在上面的代码中帮助我。
解决方案
尝试这个
struct MunicipalCorporation : Decodable{
var id : String
var bname : String
var bbcategoryname : String
var bcustomerparms : [Bcustomerparms]
}
struct Bcustomerparms : Decodable {
var paramName : String
var dataType : String
var optional : Bool?
var minLength : Int
var maxLength : Int
}
let jsonObj = try JSONSerialization.jsonObject(with: respData, options: .allowFragments) as! [String: Any]
let decoding = try! JSONDecoder().decode(MunicipalCorporation.self, from: jsonObj)
推荐阅读
- python - 向 Sql 数据库运行命令时 Python 中的模块错误
- java - 在构建期间无法使 gradle 任务在 Java 中传递值
- c# - nuget 包 Xamarin.Firebase.iOS.CloudMessaging 3.1.2 的问题
- react-native - 你如何安装native-base?
- python - 如何在 Jupyter Notebook 中运行单元格时编辑变量?
- java - Clojure 访问静态内部类构建器期望 var 但映射到构建时的类错误
- c# - 为什么我不能创建一个列表
C# 中的匿名类型? - javascript - 如何管理 Slick-Nav?当我在部分中包含 Php 代码时,Slick-Nav 会产生问题
- xamarin - 在 Xamarin Forms 中挂起的 PostAsync 在模拟器上工作,但在实际手机上挂起
- php - 将wordpress网站从windows中的localhost迁移到centos7