Swift如何重用JSON HTTP请求头
我正在制作一个应用程序,它从一个API发出许多请求。所以我不想一次又一次地复制代码。我想知道如何以更有效的方式重用代码?也许有扩展? 这是我的代码,我知道:Swift如何重用JSON HTTP请求头,json,swift,xcode,Json,Swift,Xcode,我正在制作一个应用程序,它从一个API发出许多请求。所以我不想一次又一次地复制代码。我想知道如何以更有效的方式重用代码?也许有扩展? 这是我的代码,我知道: func apiRequest() { let config = URLSessionConfiguration.default let username = "****" let password = "****" let loginString = String(format: "%@:%@", user
func apiRequest() {
let config = URLSessionConfiguration.default
let username = "****"
let password = "****"
let loginString = String(format: "%@:%@", username, password)
let userPasswordData = loginString.data(using: String.Encoding.utf8)
let base64EncodedCredential = userPasswordData?.base64EncodedString()
let authString = "Basic " + (base64EncodedCredential)!
print(authString)
config.httpAdditionalHeaders = ["Authorization" : authString]
let session = URLSession(configuration: config)
var running = false
let urlProjects = NSURL(string: "https://start.jamespro.nl/v4/api/json/projects/?limit=10")
let task = session.dataTask(with: urlProjects! as URL) {
( data, response, error) in
if let taskHeader = response as? HTTPURLResponse {
print(taskHeader.statusCode)
}
if error != nil {
print("There is an error!!!")
print(error)
} else {
if let content = data {
do {
let dictionary = try JSONSerialization.jsonObject(with: content) as! [String:Any]
print(dictionary)
if let items = dictionary["items"] as? [[String:Any]] {
for item in items {
if let description = item["Description"] as? String {
self.projectNaam.append(description)
}
if let id = item["Id"] as? String {
self.projectId.append(id)
}
if let companyId = item["CompanyId"] as? String {
self.companyId.append(companyId)
}
}
}
self.apiRequestCompani()
}
catch {
print("Error: Could not get any data")
}
}
}
running = false
}
running = true
task.resume()
while running {
print("waiting...")
sleep(1)
}
}
是的,您可以使用扩展创建BaseViewController,并在希望反复使用代码的地方进行扩展。然后,您应该在该方法的输入参数上提取所有动态数据
import UIKit
class BaseViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
}
func getApiRequest (Parameters) {
//API Request
}
然后在视图控制器中扩展BaseViewController
class ViewController: BaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
//Call method in baseviewcontroller
getApiRequest(parameters)
//Call method in self
self.getApiRequest(parameters)
}
override func getApiRequest(Parameters) {
//IF you need to override default configuration
}
所以我不想一次又一次地复制代码
绝对正确,没有人想得到重复的代码;这就是海量视图控制器的问题。出现此问题是因为应用程序中的视图控制器层处理大部分职责,例如:从网络获取数据、数据应如何表示、将格式化数据传递到视图层等等
有很多方法可以解决这样的问题(为您的应用程序使用适当的体系结构模式),为简单起见,我建议将(或MVCNetworking)方法应用到您的应用程序中,它几乎与通常的MVC相同,具有单独的文件(管理器),表示用于处理(例如)与外部API集成的新层
应用MVN-N不应该那么复杂,但是它需要很好地描述(这可能太广泛了,无法在答案中描述),我建议检查,观看也应该很有用。感谢您的反应。是的,我知道,但是你能给我举个例子说明怎么做,因为我不能做到。Thanks@R.H我编辑我的答案。无法在自己的项目中检查代码,请检查它是否工作谢谢,我绝对会检查出来!