[英]I am unable to pass data from model class to table view in swift 3?
在這種情況下,我在發布參數后從服務器響應中獲取數據,在這里我需要將其顯示在表格視圖上,並且應該以如下圖所示的方式顯示0
是特定運輸方式的價格
我已經為服務器響應數據編寫了模型類,在這里
struct ShippingMethod {
let carrierCode : String
let priceInclTax : Int
let priceExclTax : Int
let available : Any
let carrierTitle : String
let baseAmount : Int
let methodTitle : String
let amount : Int
let methodCode : String
let errorMessage : Any
init(dict : [String:Any]) {
self.carrierCode = dict["carrier_code"] as! String
self.priceInclTax = dict["price_incl_tax"]! as! Int
self.priceExclTax = dict["price_excl_tax"]! as! Int
self.available = dict["available"]!
self.carrierTitle = dict["carrier_title"] as! String
self.baseAmount = dict["base_amount"]! as! Int
self.methodTitle = dict["method_title"]! as! String
self.amount = dict["amount"]! as! Int
self.methodCode = dict["method_code"] as! String
self.errorMessage = (dict["error_message"] != nil)
}
}
通過使用此代碼,我已經形成了一個像這樣的數組類型
var finalDict = [String: [String]]()
var responseData = [ShippingMethod]()
do
{
let array = try JSONSerialization.jsonObject(with: data, options: []) as? [[String : Any]]
for item in array! {
self.responseData.append(ShippingMethod.init(dict: item))
}
print(self.responseData)
}
catch let error
{
print("json error:", error)
}
print(self.responseData)
for item in self.responseData {
let dict = item
let carrierTitle = dict.carrierTitle
let methodTitle = dict.methodTitle
if self.finalDict[carrierTitle] == nil {
self.finalDict[carrierTitle] = [String]()
}
self.finalDict[carrierTitle]!.append(methodTitle)
}
print(self.finalDict)
在該carrier title
鍵值對中,此finalDict
的輸出為["Flat Rate": ["Fixed"], "Best Way": ["Table Rate"]]
,應顯示為部分標題,並且為Flat Rate
和method title
鍵值對應在“ Fixed
部分中顯示為行,但是問題是我還需要與之對應的amount
鍵值對,用於對應的method title
,有人可以幫助我如何獲得此鍵值對嗎?
您可以分配另一個詞典,鍵為methodTitle
, amount
為value。 即, ["fixed":"whatever_amount"]
或可以不同地使用finalDict
,例如["Flat Rate": ["tilte":"Fixed","amount":"0"], "Best Way": ["title":"Table Rate","amount":"0"]]
如果您很難編碼,則可以還原。
編輯您可以在上面建議的第二個解決方案中使用以下代碼創建數組:
for item in self.responseData {
let dict = item
let carrierTitle = dict.carrierTitle
let methodTitle = dict.methodTitle
let amount = dict.amount
if self.finalDict[carrierTitle] == nil {
self.finalDict[carrierTitle] = [[String:String]]()
}
let innerDict = ["title":methodTitle,"amount":amount]
self.finalDict[carrierTitle]!.append(innerDict)
}
為什么不創建另一個用於顯示行數據的結構:
struct CarrierInfo {
let name:String
let amount:Int
}
將您的finalDict
更改為
var finalDict = [String: [CarrierInfo]]()
並創建CarrierInfo實例並將其設置為finalDict
for item in self.responseData {
let dict = item
let carrierTitle = dict.carrierTitle
let methodTitle = dict.methodTitle
let amount = dict.amount
if self.finalDict[carrierTitle] == nil {
self.finalDict[carrierTitle] = [CarrierInfo]()
}
self.finalDict[carrierTitle]!.append(CarrierInfo(name: carrierTitle, amount: amount))
}
同樣,您可以進行其他必需的更改。 這樣可以將行顯示數據整齊地包裝在結構中。
PS:我尚未在IDE中測試過代碼,因此其中可能包含輸入錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.