当前位置: 首页 > 面试题库 >

使用Alamofire和Codable提出看跌请求

满子实
2023-03-14
问题内容

我有一个简单的放置请求,并且正在使用Alamofire的Parameters类型将数据发送到服务器。我想使用codable。如何将我的可编码结构转换为参数,或者重新配置Alamofire请求以将JSON对象作为参数?使用Alamofire发送帖子和放置请求的最佳,最有效的方法是什么?

这就是我现在正在使用Alamofire所做的事情。

func addProduct(product:MainProduct, completionHandler:@escaping ((JSON?, Error?)->Void)) {

    let url = "INSERT_URL"

    let headers: HTTPHeaders = [
        "Content-Type": "application/json"
    ]

    var parameters:Parameters = [:]
    parameters["orderId"] = product.orderId
    parameters["orderSize"] = product.orderSize
    parameters["theOrderStatus"] = product.orderStatus
    let purchDate = Int((product.purchaseDate.timeIntervalSince1970)*1000)
    parameters["purchaseDate"] = purchDate
    parameters["archived"] = false

    Alamofire.request(url, method:.put, parameters: parameters, encoding: JSONEncoding.default, headers:headers).responseJSON {response in
        switch response.result {
        case .success(let value):
            print ("finish")
            let swiftyJson = JSON(value)
            completionHandler(swiftyJson, nil)
        case .failure(let error):
            completionHandler(nil, error)
        }
    }
}

这是我们的结构。

struct MainProduct:Codable{

    var purchaseDate:Date
    var orderId:String
    var orderSize:Double
    var orderStatus:OrderStatus?

    var archived:Bool

    private enum CodingKeys: String, CodingKey {
        case purchaseDate
        case orderId
        case orderSize
        case orderStatus = "theOrderStatus"
        case archived
    }
}

问题答案:

您可以制作一个新的URLRequest并设置httpBody为您的编码jsonData。试试这个代码…

func addProduct(product: MainProduct, completionHandler: @escaping ((JSON?, Error?)->Void)) {

    let encoder = JSONEncoder()
    let jsonData = try! encoder.encode(product)

    let url = "INSERT_URL"

    var request = URLRequest(url: url)
    request.httpMethod = HTTPMethod.put.rawValue
    request.setValue("application/json; charset=UTF-8", forHTTPHeaderField: "Content-Type")
    request.httpBody = jsonData

    Alamofire.request(request).responseJSON { response in
        switch response.result {
        case .success(let value):
            print ("finish")
            let swiftyJson = JSON(value)
            completionHandler(swiftyJson, nil)
        case .failure(let error):
            completionHandler(nil, error)
        }
    }
}


 类似资料:
  • 问题内容: 我正在尝试使用进行同步请求。我查看了Stackoverflow并发现了这个问题:使异步alamofire请求成为sync 我看到接受的答案用于使请求同步,但是我无法使其正常工作。这是我的简化代码: 有了这段代码,我在尝试制作时会出错。我收到的错误如下: 无法调用非功能类型“布尔”的值 我尝试使用许多使用完成的示例来同步获取值(因为我需要先检索数据才能将其显示在表上,并同时获取该表的行数

  • 最近我开始学习iOS应用程序开发使用swft,所以我是新来的。我想在Swift中实现rest api call 这就是我如何从中调用它的方法 我解码服务器响应在下面的模型 此代码无法处理来自服务器的错误响应,如等。所以我要寻找的是,将这个api()请求转换为通用的请求,并进行错误处理,如等。我已经安装了POD。是否有人开发了通用的解码请求方法 提前感谢:)

  • 本文向大家介绍Swift网络请求库Alamofire使用详解,包括了Swift网络请求库Alamofire使用详解的使用技巧和注意事项,需要的朋友参考一下 前言 Alamofire是一个使用Swift开发的网络请求库,其开发团队是AFNetworking的原团队。它语法简洁,采用链式编程的思想,使用起来是相当的舒服。本质是基于NSURLSession进行封装。接下开我们就进入实战,开始学习Alam

  • 我使用的服务器在HTTP状态消息中返回错误消息。例如,它将返回“400个用户已经存在”,而不是“400个错误请求”。 我想访问Alamofire调用的响应方法中的字符串“用户已经存在”。但是,我找不到任何方法来访问这个字符串。 我已经在StackOverflow上发现了这个问题:Swift Alamofire:如何获取HTTP响应状态代码 不幸的是,没有人回答这个问题。:( 以下是Chrome显示

  • 这是POST请求的实际图像[使用Android改造上传图像,如何使用改造进行多部分请求][2] 我使用翻新发送了多个图像文件和字符串数据,但在服务器端缺少字符串数据 我的保存注册 API

  • 我正在尝试编程一个简单的2D平台,我想让玩家浏览一些平台。不幸的是,我的玩家无缘无故地在某些平台上绊倒: 这显然不是我想要的。我唯一能想象的是,由于某种原因,这些盒子的高度不一样。。。但如何解决这个问题呢?以下是我的一些代码: createPlatform。。。 Runner.java-act()