You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS Swift中如何将字典作为参数传入POST请求?

How to Send a POST Request with Nested Dictionary Parameters in iOS Swift

Hey there! Let's walk through a complete, Swift-native way to send your nested dictionary parameters as part of a POST request. Your parameter structure is already on the right track—here's how to turn it into a working request:

Step 1: Define Your Parameters Correctly

Stick with Swift's native [String: Any] type (instead of NSDictionary) for better type safety and compatibility. Your second parameter setup is perfect for nesting dashBoardApplyListCriteria:

// Assume sessionId and jobId are already defined (e.g., as String/Int values)
let parameters: [String: Any] = [
    "sessionId": sessionId,
    "jobId": jobId,
    "dashBoardApplyListCriteria": [
        "actorList": ["Recruiter"],
        "selectedBucketStatus": "Applies",
        "allJobsOrMyJobs": "AllJobs",
        "jobStatus": [0, 1, 2],
        "paginationStartNo": 0,
        "paginationHowMuch": 5
    ],
    "applyListFilterCriteria": [
        "appliesToBeSorted": [
            "name": "dateApply",
            "isAscending": true
        ]
    ]
]

Step 2: Convert Parameters to JSON Data

Instead of using try? (which hides errors), use a do-catch block to handle serialization issues explicitly:

var jsonData: Data?
do {
    jsonData = try JSONSerialization.data(withJSONObject: parameters, options: [])
} catch {
    print("Failed to serialize parameters to JSON: \(error.localizedDescription)")
    return // Exit early if serialization fails
}

Step 3: Configure the POST Request

Set up a URLRequest for your API endpoint, define the POST method, add the required headers, and attach your JSON data:

guard let apiUrl = URL(string: "YOUR_API_ENDPOINT_HERE") else {
    print("Invalid API URL")
    return
}

var request = URLRequest(url: apiUrl)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type") // Tell the server we're sending JSON
request.httpBody = jsonData

Step 4: Send the Request & Handle the Response

Use URLSession to send the request in the background, then process the server's response:

let task = URLSession.shared.dataTask(with: request) { data, response, error in
    // Handle network errors first
    if let error = error {
        print("Network error occurred: \(error.localizedDescription)")
        return
    }
    
    // Validate the HTTP response status code
    guard let httpResponse = response as? HTTPURLResponse, (200...299).contains(httpResponse.statusCode) else {
        print("Invalid server response or non-success status code")
        return
    }
    
    // Parse and use the response data if needed
    if let responseData = data {
        do {
            if let responseJson = try JSONSerialization.jsonObject(with: responseData, options: []) as? [String: Any] {
                print("Server response: \(responseJson)")
                // Update your UI here (always dispatch to the main thread!)
                DispatchQueue.main.async {
                    // e.g., refresh your dashboard list or show a success message
                }
            }
        } catch {
            print("Failed to parse response JSON: \(error.localizedDescription)")
        }
    }
}

// Start the background task
task.resume()

Quick Tips:

  • Make sure all values in your parameters are JSON-serializable (Strings, Numbers, Arrays, Dictionaries, or nil). Avoid Swift-specific types like Date directly—convert them to ISO8601 strings first if needed.
  • Always update UI elements on the main thread, since URLSession runs tasks in a background thread.
  • If your API expects form data instead of JSON, you'd need to convert parameters to a URL-encoded string, but JSON is the standard choice for nested structures like yours.

内容的提问来源于stack exchange,提问作者Prasad A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:49:23