iOS Swift网络层
所以我遵循git回购协议来处理网络请求。我已成功地将其实现到我的应用程序中 我在我的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
签名控制器中调用签名操作
:签名操作(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
。我建议把它包括在你的项目中。即使您不想添加依赖项,检查实现仍然是值得的,这样您就可以接受这个概念并以自己的方式编写它。我不确定您为什么认为第三方库不可测试、可扩展和可维护。但是如果你想自己实现,你需要的只是在你的类中保留一个回调闭包的引用,我认为这是一个非常好的答案。在接受它作为最终答案之前,我将等待其他可能的建议或想法。但是实例化类对象,然后引用其回调属性似乎是正确的处理方法。谢谢你的回答。