簡體   English   中英

如何快速將可編碼結構發送到服務器

[英]how to send codable struct to server with swift

我幾乎是新手,我遇到了運行時錯誤,它說:

typeMismatch(Swift.Dictionary,Swift.DecodingError.Context(codingPath:[],debugDescription:“預期對Dictionary進行解碼,但找到一個數組。”,底層錯誤:nil))

我有一個需要發送到API的數據數組。

以下代碼顯示了API接受的模型

傑森

 {
  "items": [
    {
      "Number": 1,
      "ID": 9827
    }

  ]
}

我的結構:

    struct Itemm : Codable {
    var unitNo:Int? 
    var personId:Int?

    enum iItem : Int ,CodingKey{
        case unitNo , personId
    }

}
struct welcome : Codable {
    var items : [Itemm?]
}
typealias welcomeList = [welcome]

下面的代碼顯示了我創建數組並嘗試將其發送到服務器的方式

    var items = [Itemm]()
            for indexPath in self.selectedCells {
                let data = self.data![indexPath.section]
                let contact = data.contacts[indexPath.row]
                let newItem = Itemm(unitNo: data.unitNo, personId: contact?.id)
                items.append(newItem)
            }
    //      let welcome = welcome(items: items)
            print(items)
            let welcomee = welcome(items: items)
            print(welcomee)
            do{

       //I found this part on stackoverflow
            let dict = try JSONDecoder().decode([String: Int].self, from: JSONEncoder().encode(items))
                print("===============")
                print(dict)
                print("********************")
                Presenter.sendSmsForAllTheMembers(AptId: aptId, data: dict)
            }
            catch let error
            {
                print(error)
            }

我正在使用Alamofire和Moya庫。 有人知道我應該如何向API發送請求嗎?

func sendSmsForAllTheMembers(AptId:String , data:[String:Any])
{
    ApiGenerator.request(targetApi: ApartemanService.sendSms(aptId: AptId, data: data), responseModel: Nil.self, success: { (response) in
        if response.response.statusCode == 200 {
            self.view?.SendingSmsSuccess()
        }else {
            do{

                var errorMessage = try response.response.mapString()
                errorMessage = errorMessage.replacingOccurrences(of: "\"", with: "",
                                                                 options: NSString.CompareOptions.literal, range:nil)
                print("errorMessage =============")
                print(errorMessage)
                self.view?.SendingSmsFailed(errorMessage: errorMessage)

            }catch let error{
                print(error)
                self.view?.SendingSmsFailed(errorMessage: "خطا در ارتباط با سرور")
            }

        }

    }) { (error) in
        self.view?.SendingSmsFailed(errorMessage: "خطا در ارتباط با سرور")
    }
    }

編碼很好,但是重新解碼失敗。

錯誤消息很清楚。 您必須解碼一個數組。

try JSONDecoder().decode([[String: Int]].self...

但是由於API需要字典,您可以直接創建字典

var items = [[String:Int]]()
for indexPath in self.selectedCells {
    let data = self.data![indexPath.section]
    let contact = data.contacts[indexPath.row]
    items.append(["Number" : data.unitNo, "ID" : contact!.id])
}
let welcome = ["items" : items]
print(welcome)
Presenter.sendSmsForAllTheMembers(AptId: aptId, data: welcome)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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