根据附加值添加值

时间:2018-05-22 08:59:46

标签: ios

如何根据在swift3中附加值来添加值。

这是我的数据源: -

 class QM_ChartDataSourceModel: NSObject {
    var dataListArray:Array<QM_CartModel>? = []


    init(array :Array<[String:Any]>?) {
        super.init()
        var newArray:Array<[String:Any]> = []
        if array == nil{

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

        }

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

            let model = QM_CartModel(dictionary: dict)

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

typealias dummyDataSource22 =  QM_ChartDataSourceModel
extension dummyDataSource22{

    func getJsonDataStored22() ->Array<Dictionary<String,String>>{

        let jsonArray = [["id":"311","name":"Dosa Fest","price":"QR 40","quantity":"3"],["id":"312","name":"Organic Vegan Fest","price":"QR 40","quantity":"2"],["id":"313","name":"Food Of Life Time","price":"QR 56","quantity":"7"],["id":"314","name":"Tea Time","price":"QR 88","quantity":"1"],["id":"315","name":"Dosa Fest","price":"QR 13","quantity":"6"],["id":"316","name":"Organic Vegan Fest","price":"QR 4","quantity":"8"],["id":"317","name":"Food Of Life Time","price":"QR 90","quantity":"3"],["id":"318","name":"Tea Time","price":"QR 66","quantity":"2"],["id":"319","name":"Dosa Fest","price":"QR 81","quantity":"6"],["id":"320","name":"Organic Vegan Fest","price":"QR 49","quantity":"2"]] as Array<Dictionary<String,String>>

        return jsonArray
    }






}
tableviewcell中的

 func setEventData(carts:QM_CartModel)
    {
        self.name.text = carts.cartname
        self.price.text = carts.cartsum
        self.itemQuantityStepper.value = 1
        setItemQuantity(quantity)

        print(self.price.text)


        let value = carts.cartsum



        let x: Int? = Int(value!)
        print(x)


        let add = x! 
        print(add)


        let theIntegerValue1 :Int =  add
        let theStringValue1 :String = String(theIntegerValue1)
        self.price.text = theStringValue1


    }

我的模特: -

class QM_CartModel: NSObject {

    var cartname :String!
    var cartprice:String!
    var cartquantity:String!
    var carttotalprice:String!
    var carttotal:String!
    var cartQR:String!
    var cartvalue:String!
    var cartsum:String?
    var cartid:String!



     init?(dictionary :JSONDictionary) {

                guard let name = dictionary["name"] as? String else {
                    return
                }



                if     let quantity = dictionary["quantity"] as? String{


                    let price = dictionary["price"] as? String
                    let id = dictionary["id"] as? String
                    self.cartid = id
                    self.cartprice = price

                    self.cartquantity = quantity

                    let fullNameArr = price?.components(separatedBy: " ")

                    let QR    = fullNameArr?[0]
                    let value = fullNameArr?[1]

                    self.cartQR = QR
                    self.cartvalue = value

                    let x: Int? = Int(value!)
                    print(x)

                    let y:Int? = Int(quantity)
                    print(y)

                    let sum = x! * y!
                     print(sum)

                    let  sum1 = String(describing: sum)
                    cartsum = sum1








        }

我的viewmodel: -

class QM_ChartViewModel: NSObject {


    var datasourceModel:QM_ChartDataSourceModel


    var insertedArray:QM_CartModel? 

    var filteredListArray:Array<QM_CartModel>? = []


     var totalListArray:Array<QM_CartModel>? = []

    init(withdatasource  newDatasourceModel: QM_ChartDataSourceModel) {
        datasourceModel = newDatasourceModel
        print(datasourceModel.dataListArray)

    }


    func datafordisplay(atindex indexPath: IndexPath) -> QM_CartModel{
        return  datasourceModel.dataListArray![indexPath.row]

    }

    func numberOfRowsInSection(section:Int) -> Int {

        return datasourceModel.dataListArray!.count
    }

    func delete(atIndex indexPath: IndexPath) {

        datasourceModel.dataListArray!.remove(at: indexPath.row)

    }

    func search(idsearch :String?) {

        filteredListArray = datasourceModel.dataListArray?.filter{($0.cartid?.range(of: idsearch!, options: .caseInsensitive) != nil)}
        print(filteredListArray)


    }

    func searchindex(objectatindex index: Int) ->  QM_CartModel {

        return self.filteredListArray![index]

    }


    func total()
    {        totalListArray = datasourceModel.dataListArray?.filter{($0.cartsum != nil)}
        print(totalListArray)


    }


    func add(){

            datasourceModel.dataListArray?.append(insertedArray!)
            print(datasourceModel.dataListArray)
            print(insertedArray?.offerAddName)
            print(insertedArray?.offerprice)

            self.datasourceModel.dataListArray = datasourceModel.dataListArray

            print(insertedArray?.cartsum)


    }


    func addquantity(quantity:Int)
    {
       // datasourceModel.dataListArray?.filter{ $0.cartid! == cartaddedid! }.first?.qty = quantity as NSNumber?


    }


 }

在viewcontroller我的代码如下:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {


        return chartViewModel.numberOfRowsInSection(section: section)

    }


    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


        let identifier = "cell"
        var cell: QM_ChartCell! = tableView.dequeueReusableCell(withIdentifier: identifier) as? QM_ChartCell

        if cell == nil {
            tableView.register(UINib(nibName: "QM_ChartCell", bundle: nil), forCellReuseIdentifier: identifier)
            cell = tableView.dequeueReusableCell(withIdentifier: identifier) as? QM_ChartCell
        }


        cell.setEventData(carts: chartViewModel.datafordisplay(atindex: indexPath))
        print(cell.numbers)

see here can see the total.So that way i need to display the total

这是我的代码......这里我得到了值model.cartsum。这个值附加在var number:[String] = []

。但在这里我需要 - 随着值附加,这里我需要添加数字。所以第一个值是1,第二个值是2然后我需要添加这个值。如果下一个数字是3那么我需要得到和= 6。 如何获得

2 个答案:

答案 0 :(得分:0)

您需要在从服务部门或本地获取所有购物车之后计算所有购物车的东西。您不需要在cellForRowAtIndex:方法中进行计算,因为它应该执行一次。

我认为这是您提到的数据结构。

let jsonArray = [["id":"311","name":"Dosa Fest","price":"QR 40","quantity":"3"],
                     ["id":"312","name":"Organic Vegan Fest","price":"QR 40","quantity":"2"],
                     ["id":"313","name":"Food Of Life Time","price":"QR 56","quantity":"7"],
                     ["id":"314","name":"Tea Time","price":"QR 88","quantity":"1"],
                     ["id":"315","name":"Dosa Fest","price":"QR 13","quantity":"6"],
                     ["id":"316","name":"Organic Vegan Fest","price":"QR 4","quantity":"8"],
                     ["id":"317","name":"Food Of Life Time","price":"QR 90","quantity":"3"],
                     ["id":"318","name":"Tea Time","price":"QR 66","quantity":"2"],
                     ["id":"319","name":"Dosa Fest","price":"QR 81","quantity":"6"],
                     ["id":"320","name":"Organic Vegan Fest","price":"QR 49","quantity":"2"]]

以下是如何计算购物车的总数。根据您的数据,考虑价格为Int

var total = 0
for item in jsonArray {

    /// Will check if quantity is available in dictionary and convertible into an Int else will be 0
    let quantity = Int(item["quantity"] ?? "0") ?? 0

    /// Will check price key exists in the dictionary
    if let priceStr = item["price"] {

        /// Will fetch the last components and check if it is convertible into an Int else 0
        let price =  Int(priceStr.components(separatedBy: " ").last ?? "0") ?? 0
        /// Multiply price with quantity and add into total
        total += price * quantity
    }
}

print(total)
  

输出: 1776

另一种方式:

let total = jsonArray.map { (item) -> Int in
        let quantity = Int(item["quantity"] ?? "0") ?? 0
        let price = Int(item["price"]?.components(separatedBy: " ").last ?? "0") ?? 0
        return quantity * price
    }.reduce(0, +)

print(total)

答案 1 :(得分:-1)

如果您有Int

数组,请尝试使用此代码
var arrayOfInt = [2,3,4,5,4,7,2]
let reducedNumberSum = arrayOfInt.reduce(0,+)
print(reducedNumberSum)
  

答案:27

在您的代码中

let model = chartViewModel.datafordisplay(atindex: indexPath)

请详细说明,以便我们根据您的问题解答。