Как передать значение в словаре.
Модель: -
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
}
}
моя модель просмотра: -
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 my cartdatasource: -
let jsonArray = [["totalid": "1", "totalsum": "0"]] как массив>
Здесь totalSum = 0
Но мне нужно передать 123 в totalalsum key.Means мне нужно получить totalsum = 123 Как пройти. Так как установить это значение в cartresultview.means: -self.totalresult.text =?
Очень сложно понять, что вы пытаетесь сделать, и в основном нет JSON (пока?). Если вы определяете свой массив как
let: [[String : Any]] jsonArray = [["totalid":"1","totalsum":"0"]]
это утверждение
jsonArray[0]["totalsum"] = 123
даст простой
Cannot assign through subscript: 'jsonArray' is a 'let' constant
из компилятора. Это немного странно для людей, пришедших из JavaScript, но структура данных по умолчанию Swift неизменна.
Достаточно легко решить:
var jsonArray : [[String : Any]] = [["totalid":"1","totalsum":"0"]]
jsonArray[0]["totalsum"] = 123
вы можете назначить все, что хотите, для var
iable, если оно определено соответствующим образом. Я думаю, вы хотели бы вычислить свой "totalsum" из того, что вы загружаете в массив, но вам нужно было бы четко показать свои намерения, чтобы быть уверенным.
В качестве общего совета я хотел бы придерживаться протокола Codable
для вещей, которые вы на самом деле хотите проанализировать из JSON, ваш код Swift будет намного менее беспорядочным, и вам не придется загадывать его с помощью бросков и необязательных разворачиваний.
вы можете сделать это вот так:
jsonArray[0]["totalsum"] = "123"
его лучше вставить, если позволить игнорировать ничтожный крах
if let _ = jsonArray[0]["totalsum"] {
jsonArray[0]["totalsum"] = "123"
}