'While update specific class object value in Array than it update all object value in array
I have class object array in which store product value, when change specific object value than it change in all object value in array. i have used firstIndex method, map method, filter method to update specific object value but still change all object value in array.
Model for Product:
public class NewSellLocalDataModel:Encodable {
var sessionId:String = ""
var totalCount:Int = 0
var currentCount:Int = 0
var data = newSellData()
enum CodingKeys: String, CodingKey{
case sessionId = "sellSessionId"
case totalCount = "totalCount"
case currentCount = "currentCount"
case data = "data"
}
public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(sessionId, forKey: .sessionId)
try container.encode(totalCount, forKey: .totalCount)
try container.encode(currentCount, forKey: .currentCount)
try container.encode(data, forKey: .data)
}
}
public class newSellData:Encodable {
var spu:String = ""
var imagesAndVideo:[String] = []
var imagesAndVideoAsset:[PHAsset] = []
var images:[String] = []
var videos:[String] = []
var productDetails = NewSellProductDetails()
var defaultData = NewSellDefaultData()
var categoryVariantData:[VarientData]?
var categorySubVariantData:[SubVarientData]?
var weightData:[WeightData]?
enum CodingKeys: String, CodingKey{
case spu = "spu"
case imagesAndVideo
case images = "images"
case videos = "videos"
case productDetails = "productDetails"
case defaultData = "defaultData"
case categoryVariantData
case categorySubVariantData
case weightData
}
public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(spu, forKey: .spu)
try container.encode(imagesAndVideo, forKey: .imagesAndVideo)
try container.encode(images, forKey: .images)
try container.encode(videos, forKey: .videos)
try container.encode(productDetails, forKey: .productDetails)
try container.encode(defaultData, forKey: .defaultData)
try container.encode(categoryVariantData, forKey: .categoryVariantData)
try container.encode(categorySubVariantData, forKey: .categorySubVariantData)
try container.encode(weightData, forKey: .weightData)
}
}
public class NewSellProductDetails:Encodable {
var title: String = ""
var productDescription: String = ""
var category:String = ""
var categoryId:String = ""
var condition: String = ""
var unitType: String = ""
var unitCount:Int = 0
var weight:String = ""
var weightTitle:String = ""
var country:String = ""
var countryTitle: String = ""
var color: String = ""
var varientTitle:String = ""
var subVariantTitle:String = ""
var varients = [NewSellProductVariants]()
var autoBargain:Int = 0
var maxBargainPercent:Int = 0
var imageTags:[String] = []
enum CodingKeys: String, CodingKey{
case title = "title"
case productDescription = "description"
case category
case categoryId = "categoryId"
case condition = "condition"
case unitType = "unitType"
case unitCount = "unitCount"
case weight = "weight"
case country = "country"
case color = "color"
case varients = "varients"
case autoBargain = "autoBargain"
case maxBargainPercent = "maxBargainPercent"
case imageTags
case varientTitle
case subVariantTitle
case weightTitle
}
public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(title, forKey: .title)
try container.encode(productDescription, forKey: .productDescription)
try container.encode(category, forKey: .category)
try container.encode(categoryId, forKey: .categoryId)
try container.encode(condition, forKey: .condition)
try container.encode(unitType, forKey: .unitType)
try container.encode(unitCount, forKey: .unitCount)
try container.encode(weight, forKey: .weight)
try container.encode(country, forKey: .country)
try container.encode(color, forKey: .color)
try container.encode(varients, forKey: .varients)
try container.encode(autoBargain, forKey: .autoBargain)
try container.encode(maxBargainPercent, forKey: .maxBargainPercent)
try container.encode(imageTags, forKey: .imageTags)
try container.encode(varientTitle, forKey: .varientTitle)
try container.encode(subVariantTitle, forKey: .subVariantTitle)
try container.encode(weightTitle, forKey: .weightTitle)
}
}
public class NewSellProductVariants:Codable{
var varient: String = ""
var subvarient:String = ""
var quantity: Int = 1
var labelPrice:Int = 0
var listedPrice:Int = 0
var discount:String = ""
var displayIcon:String = ""
var variantImages:[String] = []
var variantVideo:[String] = []
var imagesAndVideo:[String] = []
var imageAndVideoAsset:[PHAsset] = []
var pickupCharges:Int = 0
var commissionPercent:Int = 0
enum CodingKeys: String, CodingKey{
case varient = "varient"
case subvarient = "subvarient"
case quantity = "quantity"
case labelPrice = "labelPrice"
case listedPrice = "listedPrice"
case displayIcon, discount
case variantImages, variantVideo,imagesAndVideo
case pickupCharges
case commissionPercent
}
public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(varient, forKey: .varient)
try container.encode(subvarient, forKey: .subvarient)
try container.encode(quantity, forKey: .quantity)
try container.encode(labelPrice, forKey: .labelPrice)
try container.encode(listedPrice, forKey: .listedPrice)
try container.encode(discount, forKey: .discount)
try container.encode(displayIcon, forKey: .displayIcon)
try container.encode(variantImages, forKey: .variantImages)
try container.encode(variantVideo, forKey: .variantVideo)
try container.encode(imagesAndVideo, forKey: .imagesAndVideo)
try container.encode(pickupCharges, forKey: .pickupCharges)
try container.encode(commissionPercent, forKey: .commissionPercent)
}
}
public class NewSellDefaultData:Encodable{
var couponApplied: String = "NA"
var address:Int = 0
var pincode:String = ""
var serviceType: String = ""
var returnProduct :Int = 0
var maxReturnDays:Int = 0
var serviceName:String = ""
var displayIcon:String = ""
var commissionPercent:Int?
var pickupCharges:Int?
enum CodingKeys: String, CodingKey{
case couponApplied = "couponApplied"
case address = "addressId"
case serviceType = "serviceType"
case returnProduct = "return"
case maxReturnDays = "maxReturnDays"
case serviceName
case displayIcon, pincode
case commissionPercent, pickupCharges
}
public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(couponApplied, forKey: .couponApplied)
try container.encode(address, forKey: .address)
try container.encode(serviceType, forKey: .serviceType)
try container.encode(returnProduct, forKey: .returnProduct)
try container.encode(maxReturnDays, forKey: .maxReturnDays)
try container.encode(serviceName, forKey: .serviceName)
try container.encode(displayIcon, forKey: .displayIcon)
try container.encode(commissionPercent, forKey: .commissionPercent)
try container.encode(pickupCharges, forKey: .pickupCharges)
try container.encode(pincode, forKey: .pincode)
}
}
array of class object:
var newSellListingSummaryProducts = [NewSellLocalDataModel]()
I want to update specific object's NewSellDefaultData value, but when change in specific object it will change in all object.
use Map method to update specific object value:
SingletonClass.shareInstance.newSellListingSummaryProducts = SingletonClass.shareInstance.newSellListingSummaryProducts.map{
let mutableBook = $0
if $0.currentCount == currentCount{
mutableBook.data.defaultData = defaultData
}
return mutableBook
}
use firstIndex method:
if let row = SingletonClass.shareInstance.newSellListingSummaryProducts.firstIndex(where: { $0.currentCount == currentCount }){
SingletonClass.shareInstance.newSellListingSummaryProducts[row].data.defaultData.commissionPercent = self.commissionPercentage ?? 0
SingletonClass.shareInstance.newSellListingSummaryProducts[row].data.defaultData.pickupCharges = self.pickUpCharges
SingletonClass.shareInstance.newSellListingSummaryProducts[row].data.defaultData.displayIcon = self.serviceLogo ?? ""
SingletonClass.shareInstance.newSellListingSummaryProducts[row].data.defaultData.serviceName = self.serviceName ?? ""
SingletonClass.shareInstance.newSellListingSummaryProducts[row].data.defaultData.serviceType = self.serviceId ?? ""
SingletonClass.shareInstance.newSellListingSummaryProducts[row].data.defaultData.couponApplied = couponId ?? ""
}
Wwhich method I have to used for class object array to change NewSellDefaultData of specific index of object?
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
