Swift如何重用JSON HTTP请求头

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

我正在制作一个应用程序,它从一个API发出许多请求。所以我不想一次又一次地复制代码。我想知道如何以更有效的方式重用代码?也许有扩展? 这是我的代码,我知道:

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我编辑我的答案。无法在自己的项目中检查代码,请检查它是否工作谢谢,我绝对会检查出来!