如何传递字典中的值

时间:2018-05-24 06:47:42

标签: ios swift

如何传递字典中的值。

模型: -

class cartresultModel: NSObject {

    var totalsum:String!
    var totalid:String!

    init?(dictionary:JSONDictionary) {
      guard let totalsum = dictionary["totalsum"] as? String,
        let totalid = dictionary["totalid"] as? String else {
            return
        }

        self.totalsum = totalsum
        self.totalid = totalid
        print( self.totalsum )
    }

}

datasourcemodel: -

 class CartresultDataSource: NSObject {
        var dataListArray:Array<cartresultModel>? = []


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

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

            }

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

                let model = cartresultModel(dictionary: dict)

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



    }

    typealias dummyDataSource222 =  CartresultDataSource
    extension dummyDataSource222{

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

            let jsonArray = [["totalid":"1","totalsum":"0"]] as Array<Dictionary<String,String>>

            return jsonArray
        }






    }

我的viewmodel: -

   class CartresultViewModel: NSObject {

        var datasourceModel:CartresultDataSource


        var no: [String] = []


        var filteredListArray:Array<cartresultModel>? = []


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



        }



        func datafordisplay(objectatindex index: Int) ->  cartresultModel{
            return  (datasourceModel.dataListArray?[index])!

        }

        func numberOfRowsInSection(section:Int) -> Int {

            return datasourceModel.dataListArray!.count
        }





    }

我的cartdisplayresult视图: -

class CartdisplayView: UIView {


     @IBOutlet weak var totalresult:UILabel!




    override init(frame:CGRect)
    {
        super.init(frame: frame)
    }


    required init?(coder aDecoder: NSCoder) {
        super.init(coder:aDecoder)
    }


    func setcartdetailData(cartsdetail:QM_cartresultModel)
    {
      //  self.totalresult.text = cartsdetail.totalsum



    }

}

从其他viewcontroller我发送了self.no中的总价格金额(这是在cartresultviewmodel中)。

假设the output is ["[123]"]

从这个输出我需要取值123 .AS我的cartdatasource: -

让jsonArray = [[“totalid”:“1”,“totalsum”:“0”]]作为数组&gt;

这里totalSum = 0

但我需要在总计密钥中传递123.Means我需要得到totalsum = 123 如何通过。那么如何在cartresultview.means中设置这个值:-self.totalresult.text =?

2 个答案:

答案 0 :(得分:0)

你可以这样做

jsonArray[0]["totalsum"] = "123"

如果让忽略nil崩溃

,最好放入
 if let _ = jsonArray[0]["totalsum"]  {
       jsonArray[0]["totalsum"] = "123"
      }

答案 1 :(得分:0)

很难理解你要做什么,基本上没有涉及JSON(但是?)。如果将数组定义为

let: [[String : Any]]  jsonArray = [["totalid":"1","totalsum":"0"]]

这句话

jsonArray[0]["totalsum"] = 123

将产生一个简单的

Cannot assign through subscript: 'jsonArray' is a 'let' constant

来自编译器。对于来自JavaScript的人来说有点奇怪,但Swift的默认数据结构是 immutable

很容易解决:

var jsonArray : [[String : Any]] = [["totalid":"1","totalsum":"0"]]
jsonArray[0]["totalsum"] = 123

如果相应地定义了var iable,你可以指定你想要的任何东西。我猜测你想计算你的&#34; totalsum&#34;从你在数组中加载的任何东西,但你必须更清楚地表明你的意图,以确保。

作为一般建议,我会坚持使用Codable协议来处理你实际要从JSON解析的东西,你的Swift代码将会更加混乱,你赢了# 39;不得不用演员和可选的解开来谜语。