我是swift的新手,并且我已经创建了tableview select all rows功能,所以select deselect对我来说很好用,但是现在我想要在tableview中选择数据,因此我尝试使用Encodable
创建结构模型,如下所示
class QuotationListDataModel: Encodable{
var id: String?
var quantity: String?
var margin: String?
var created_date: String?
var part_number: String?
var total_price: String?
var freight: String?
var fk_customer_id: String?
init(id: String?,quantity: String?,margin: String?,created_date: String?,part_number: String,total_price: String,freight: String,fk_customer_id: String) {
self.id = id
self.quantity = quantity
self.margin = margin
self.created_date = created_date
self.part_number = part_number
self.total_price = total_price
self.freight = freight
self.fk_customer_id = fk_customer_id
}
}
我想像下面这样放掉
[
{
margin: 20,
quantity: 10
part_number: 15
total_price: 1500
freight: 100
},
{
margin: 20,
quantity: 10
part_number: 15
total_price: 1500
freight: 100
}
]
@IBAction func btnSelectAllTapped(_ sender: UIButton) {
if btnSelectAll.titleLabel?.text == "Select All"{
self.btnSelectAll.setTitle("DeSelect All", for: .normal)
self.btnSelectAll.backgroundColor = UIColor(red: 119/255, green: 119/255, blue: 119/255, alpha: 1)
self.btnShare.isHidden = false
self.arrSelectedIds = quotationSeelctedData.map({ (quotation: QuotationListDataModel) -> String in quotation.id! })
//Here when user select all i want all data into array
self.tblListView.reloadData()
}else{
self.isSelectAll = false
btnSelectAll.setTitle("Select All", for: .normal)
btnSelectAll.backgroundColor = UIColor(red: 0/255, green: 175/255, blue: 239/255, alpha: 1)
self.btnShare.isHidden = true
self.arrSelectedIds.removeAll()
print(arrSelectedIds)
self.tblListView.reloadData()
}
}
所以我想要这样的选定数据,任何人都可以请我帮忙解决
答案 0 :(得分:0)
您可以创建一个类似的数组
var QuotationList = [QuotationListDataModel]()
在didSelect委托中,您可以将模型添加到列表中,例如
QuotationList = allDataArray[indexPath.row]
选定的数据将被添加到您的阵列
答案 1 :(得分:0)
尝试一下:
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
do {
let jsonData = try encoder.encode(MYARRAY)
if let jsonString = String.init(data: jsonData, encoding: .utf8) {
// That's your JSON string...
print(jsonString)
}
} catch {
print("the encoding failed")
}
无论如何,您都需要通过ID来获取项目...更好,更快的解决方案是使用选定单元格的索引路径,并将其从数据源中提取出来。
编辑:如Joakim Danielson所述,添加所需的CodingKeys。
答案 2 :(得分:0)
要对行进行编码,您需要向类中添加一个枚举,该枚举包含要成为编码数据一部分的属性
enum CodingKeys: String, CodingKey {
case margin, quantity, part_number, total_price, freight
}
然后您可以像这样编码
do {
let data = try JSONEncoder().encode(arr)
} catch {
print(error)
}
要考虑的一些问题,为什么所有类型都是String类型,为什么都可选?