swift - HTTP 发布请求并在应用程序中保存响应
问题描述
我对 swift 和 iOS 编程完全陌生,所以我对如何执行此操作甚至在哪些文件中我也应该执行此操作有点迷茫。
我正在尝试执行 http 发布请求以获取日历事件并将它们保存在应用程序中以供以后使用和显示。
我用这段代码做了一个模型类。
import UIKit
class Event {
var id: Int
var init_date: String
var end_date: String
var title: String
var description: String
var color_code: String
var all_day: Int
init?(id: Int, init_date: String, end_date: String, title: String, description: String, color_code: String, all_day: Int) {
//Initialization should fail if these are false
if id < 0 || init_date.isEmpty || end_date.isEmpty || title.isEmpty {
return nil
}
//Initialize stored properties
self.id = id
self.init_date = init_date
self.end_date = end_date
self.title = title
self.description = description
self.color_code = color_code
self.all_day = all_day
}
}
但现在我不知道下一步会是什么。我需要在第一次打开应用程序后立即下载此应用程序,而不是在第一次未打开应用程序时立即下载。我是否在 ViewController.swift 中创建一个新方法以供下载?
现在我还没有向 ViewController 添加任何内容
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}
接下来我该怎么办?
解决方案
此时您需要创建一个函数来处理您发出的 POST 请求。
完成后,将此函数放在您的 appDelegate 主函数 didFinishLaunchingWithOptions 中。这是在 appStart 上执行的函数
在成功的函数调用中,将数据(可能是 json)保存到全局变量或应用程序所需的任何内容中。
提示:在你上课
class Event: Codable {
}
确保像上面一样添加 Codable
以下是您的发布请求的示例
func myPostRequest(completionHandler: @escaping (Bool?, String?) -> Void){
guard let url = URL(string:"") else { return }
let parameters = ["": ""]
var request: URLRequest = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue("", forHTTPHeaderField: "Authorization")
do {
request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard
error == nil
else {
print(error as Any)
return
}
if let httpResponse = response as? HTTPURLResponse {
if (httpResponse.statusCode == 200) {
if let data = data {
let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [[String: Any]]
//print("^^^^^^^^^^^^^^",json)
for x in json ?? [] {
//here is where you will parse your data from the post request
}
completionHandler(true, nil)
return
}
} else {
completionHandler(false, "No Response From Server")
print("Failure response: STATUS CODE != 200")
}
} else {
completionHandler(false, "Database Connection Error")
print("Error \(error!)")
}
}
task.resume()
} catch let error {
completionHandler(false, "failure")
print("POSTERROR: \(error.localizedDescription)")
}
}
推荐阅读
- file - 在 talend 中读取带有 HEX 分隔符的 .DAT 文件
- python - Python中的MySQL问题
- kotlin - IntelliJ IDEA 中的 Kotlin 5.21
- c# - 用 \ char 替换字符串在 Visual Studio 2019 中不起作用
- javascript - Slate.js - 大括号不起作用
- r - 如何在 R 中有效地增长向量?
- leaflet - 替代 Folium 的 GeoJSON 中的循环
- angular - 创建 2 个表单页面
- angular - 获取在 ngfor 中定义的多个 ngx-slider 对象的值
- c++ - 在 OMNET++ 中,如果它们都位于 WSN 中的不同 StandardHost 模块中,如何在运行时将控制值从一个应用程序发送到另一个应用程序?