使用Alamofire将多个类型参数发送到API-Swift

时间:2019-09-03 09:14:04

标签: swift alamofire

我需要使用API将两个像下面这样的参数发送到Alamofire

function: Stringjson: ModelPostFiltersShort

function: String:这是一个字符串名称。

这个(json: ModelPostFiltersShort)参数就像下面这样:

struct ModelPostFiltersShort: Codable {
    var languages, types: [String]
    var categories: [Int]
    var page: Int
}

如何使用Alamofire发送这些参数?

let params : [String : ?] = ["function": function,"??": ??]

Alamofire.request(url, method: .get, parameters: params????).responseJSON {
}

在android中,我发送的值如下:

@POST("/web_service/mobile/rest")
Observable<Response<List<GetShortTermCoursesModel>>> getResultFilters(@Query("function") String function,
                                                                      @Body SendFiltersShortCourseModel sendFiltersShortCourseModel);

@Body SendFiltersShortCourseModel sendFiltersShortCourseModel参数没有名称!

2 个答案:

答案 0 :(得分:1)

使用JSONEncoderdata实例中获取ModelPostFiltersShort's,然后使用String String's将它转换为init(data:encoding:),即

do {
    let data = try JSONEncoder().encode(obj) //this is body of the request
    let params = ["function": function] //these are query params
    if let url = URL(string: "YOUR_URL") {
        var urlRequest = URLRequest(url: url) // create url request
        urlRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
        urlRequest.httpBody = data
        //now create Alamofire request here...
    }
} catch {
    print(error)
}

obj是类型ModelPostFiltersShort

的实例

答案 1 :(得分:1)

创建一个包含所有主体(请求参数)的模型

struct RequestParameters: Codable {
    let languages: [String]
    let types: [String]
    let categories: [Int]
    let page: Int
}

使用下面的代码准备和发送请求

func sendRequest() {

        let requestParameters = RequestParameters(languages: ["fa"], types: ["modular"], categories: [70], page: 1)
        // create full parameters model

        let encoder = JSONEncoder() // create encoder to encode your request parameters to Data

        guard let data = try? encoder.encode(requestParameters) else {
            return
        } // create data

        let url = URL(string: "https://reg.mou.ir/web_service/mobile/rest?function=getShortTermCourses")! // create url

        var urlRequest = URLRequest(url: url) // create url request

        urlRequest.addValue("application/json", forHTTPHeaderField: "Content-Type") // add all the headers you need

        urlRequest.httpBody = data // add your parameters
        urlRequest.httpMethod = "POST"

        // send your request
        Alamofire.request(urlRequest).responseString { (response) in
            switch response.result {
            case .success(let responseString):
                print("Success: \(responseString)") // get your response here
            case .failure(let error):
                print("Error: \(error.localizedDescription)") // get error if it appears here
            }
        }
    }