iOS Swift网络层

iOS Swift网络层,ios,swift,networking,callback,closures,Ios,Swift,Networking,Callback,Closures,所以我遵循git回购协议来处理网络请求。我已成功地将其实现到我的应用程序中 我在我的签名控制器中调用签名操作:签名操作(email:email,password:password).start()因此,此repo的设置方式主要处理请求操作中的成功和失败,如下所示: import Foundation public class SignInOperation: ServiceOperation { private let request: SignInRequest publ

所以我遵循git回购协议来处理网络请求。我已成功地将其实现到我的应用程序中

我在我的
签名控制器中调用
签名操作
签名操作(email:email,password:password).start()
因此,此repo的设置方式主要处理请求操作中的成功和失败,如下所示:

import Foundation

public class SignInOperation: ServiceOperation {

    private let request: SignInRequest

    public var success: ((SignInItem) -> Void)?
    public var failure: ((NSError) -> Void)?

    public init(email: String, password: String, service: BackendService = MyBackendService(BackendConfiguration.shared)) {
        request = SignInRequest(email: email, password: password)
        super.init(service: service)
    }

    public override func start() {
        super.start()
        service.request(request, success: handleSuccess, failure: handleFailure)
    }

    private func handleSuccess(_ response: Any?) {
        do {
            let item = try SignInResponseMapper.process(response)
            self.success?(item)
            self.finish()
        } catch {
            handleFailure(NSError.cannotParseResponse())
        }
    }

    private func handleFailure(_ error: NSError) {
        self.failure?(error)
        self.finish()
    }
}
我想做的主要是:

SignInOperation(email: email, password: password).start().then(
  // handleResponse
)
甚至不一定是这样。但这只是我可以在控制器中处理响应的一种方式,而不是网络文件。如有任何建议或想法,将不胜感激。如果有人觉得有必要,我肯定可以分享更多的代码


另外,我正特别尝试按照这种设计来处理你的
网络请求
,因为我正在构建一个更大规模的社交应用程序。因此,我想要一些可维护、可扩展和可测试的东西

将操作成功和错误状态传递给闭包,并调用要处理的闭包。希望下面的代码能帮助你

 class Test : UIViewController{

let mail = "abc@xyz.com"
let password = "******"

var operation : SignInOperation?

override func viewDidLoad() {
    super.viewDidLoad()

    operation = SignInOperation(email: mail, password: password)
    operation?.failure = { error in
        print(error.localizedDescription)
        // handle failure over here
    }

    operation?.success = { item in
        // handle success here
        // you can use data from item which is an Instance of SignInItem over here
    }
  }
}

您可以将回调引用保留在SigninoOperation中,并在完成所有操作后调用。我建议您使用
Alamofire
。这会节省你的时间。我正试着远离像阿拉莫菲尔这样的东西。我使用的是
URLSession
,作为回报,我认为它可以为您提供与
Alamofire
相同的功能和易于实现,并且不是第三方依赖。然而,我之所以遵循提供的指南,是因为我试图通过一种完全可测试、可扩展和可维护的方式来处理我的
网络层
,这是我认为Alamofire
无法实现的。你需要看看
PromiseKit
。我建议把它包括在你的项目中。即使您不想添加依赖项,检查实现仍然是值得的,这样您就可以接受这个概念并以自己的方式编写它。我不确定您为什么认为第三方库不可测试、可扩展和可维护。但是如果你想自己实现,你需要的只是在你的类中保留一个回调闭包的引用,我认为这是一个非常好的答案。在接受它作为最终答案之前,我将等待其他可能的建议或想法。但是实例化类对象,然后引用其回调属性似乎是正确的处理方法。谢谢你的回答。