簡體   English   中英

我無法在Swift 3中將數據從模型類傳遞到表視圖?

[英]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 Ratemethod title鍵值對應在“ Fixed部分中顯示為行,但是問題是我還需要與之對應的amount鍵值對,用於對應的method title ,有人可以幫助我如何獲得此鍵值對嗎?

您可以分配另一個詞典,鍵為methodTitleamount為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM