Это мои необработанные данные JSON;
{
"participants":[
{
"name":"Ram",
"mobile_no":"912368790",
"events":[6,7,8,9,10],
"gender":"male",
"whatsapp_no":"912368790"
},
{
"name":"Sham",
"mobile_no":"9909123456",
"events":[9,10],
"gender":"male",
"whatsapp_no":"9909123456"
}
]
}
Это мой пользовательский интерфейс
Я вставил одну ячейку, нажимая кнопку Добавить еще, как показано на скриншоте. когда я помещаю данные в текстовое поле, нажимаю кнопку «Отправить» и вызываю API. Я получаю ответ.
Но моя проблема в том, что я получаю ответ от Индивидуального 2, Индивидуального 3, Индивидуального 4 ... в другом массиве словаря. Я не могу добавить отдельные 2, отдельные 3, отдельные 4 ... в один массив, как показано в необработанных данных JSON.
Я новичок в Swift, может ли кто-нибудь помочь мне, как обрабатывать необработанные данные JSON с UITableView.
Это мой код
class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate,UITextFieldDelegate {
@IBOutlet weak var addmore: UIButton!
var cells:Array<Any> = []
var ar = ["Individual 1"]
@IBOutlet weak var tableview: UITableView!
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return ar.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableview.dequeueReusableCell(withIdentifier: "cell") as! TableTVC
cell.indivuallbl.text! = ar[indexPath.row ]
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 240.5
}
@IBAction func deleterow(_ sender: Any) {
let point = (sender as AnyObject).convert(CGPoint.zero, to: tableview)
guard let indexPath = tableview.indexPathForRow(at: point) else {
return
}
ar.remove(at: indexPath.row)
print(ar.count)
tableview.deleteRows(at: [indexPath], with: .automatic)
}
override func viewDidLoad() {
super.viewDidLoad()
addmore.layer.cornerRadius = 5
self.tableview.reloadData()
let myCell:TableTVC = tableview.cellForRow(at: IndexPath(row: 0, section: 0))! as! TableTVC
cells.insert(myCell, at: 0)
}
@IBAction func addmore(_ sender: Any) {
print("abhi")
ar.insert("Individual \(ar.count + 1 )", at: ar.count)
print(ar.count)
let myIndexPath = IndexPath(row: ar.count-1 , section: 0)
tableview.insertRows(at: [myIndexPath], with: .bottom)
let myCell:TableTVC = tableview.cellForRow(at: myIndexPath)! as! TableTVC
cells.insert(myCell, at: ar.count - 1)
}
@IBAction func submitBtn(_ sender: Any) {
NotificationCenter.default.post(name: .data, object: nil)
}
}
UItableviewcell
class TableTVC: UITableViewCell, UITextFieldDelegate {
@IBOutlet weak var whatsappnotxt: UITextField!
@IBOutlet weak var phonenotxt: UITextField!
@IBOutlet weak var nametxt: UITextField!
@IBOutlet weak var gendropDowntx: HADropDown!
@IBOutlet weak var indivuallbl: UILabel!
var item = [String: Any]()
override func awakeFromNib() {
super.awakeFromNib()
NotificationCenter.default.addObserver(self, selector: #selector(datatable(notification:)), name: .data, object: nil)
}
@objc func datatable(notification: Notification){
var pP: [String: AnyObject] =
[
"participants":[
[ ]
] as AnyObject
]
print(pP)
self.item = [
"name": "\(nametxt.text!)",
"mobile_no": "\(phonenotxt.text!)",
"events":[6,7,8,9],
"gender":"male",
"whatsapp_no":"\(whatsappnotxt.text!)"
]
print(item)
var existingItems = pP["participants"] as? [[String: Any]] ?? [[String: Any]]()
print(existingItems)
existingItems.append(item)
pP["participants"] = existingItems as AnyObject
guard let url = URL(string: "http://api.domain.com/individual/add") else { return }
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
request.addValue("application/json", forHTTPHeaderField: "Accept")
guard let httpBody = try? JSONSerialization.data(withJSONObject: pP , options: []) else { return }
request.httpBody = httpBody
let session = URLSession.shared
session.dataTask(with: request) { (data, response, error) in
if let response = response {
print(response)
}
if let data = data {
do {
let json = try JSONSerialization.jsonObject(with: data, options: [])
print(json)
if let dictionary = json as? [String: AnyObject],
let name = dictionary["errors"]{
print("language name: \(name)")
}
} catch {
print(error)
}
}
}.resume()
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}
extension Notification.Name{
static let data = Notification.Name("data")
}