我是 IOS
的新手。我正在使用 Alamofire
进行网络请求。我在以下方面非常成功......
- 带参数请求
- 显示事件指标
- 获取响应并隐藏事件指示器
- 将响应解析为模态
我对 OOP 有很好的概念。我有很好的 android 工作经验。在 android 中,我用来为服务创建一个集中类,并从事件中调用它,然后我使用回调传递结果。
通过这种方式,它更加紧凑并且避免了我一次又一次地编写相同的代码。我搜索了一下,发现委托(delegate)与 java/android 中的回调/接口(interface)是一样的。
我的问题:
Can Any one tell me how to make a
Alamofire
code in one class and how to call that from other View controllers with different number and type of parameters. and with different type of results to send back into related View controller? is it possible and how using swift??
最佳答案
使用 WebServicesCall 或您喜欢的名称创建一个 swift 文件并使用以下代码。我在这里使用 SwiftyJSON
和 Alamofire
。
import UIKit
import Alamofire
import SwiftyJSON
struct WebService {
static func requestService(url: URL, method: HTTPMethod, parameters: Parameters, headers: HTTPHeaders? = nil, showLoaderFlag: Bool, viewController: UIViewController, completion: @escaping (_ success: JSON) -> Void) {
/* check for internet connection */
if(Reachability.isConnectedToNetwork()) {
/* Show Loader here */
print("Web Service - \(url)")
print("Header - \(String(describing: headers))")
print("Parameters - \(parameters)")
/* Request configure */
AlmofireService.Manager.request(url, method: method, parameters: parameters, encoding: JSONEncoding.default, headers: header) .responseJSON { response in
print("Response - \(response)")
switch response.result {
case .success(_):
/* Hide loader here */
let json = JSON(response.result.value!)
completion(json)
case .failure(_):
print("Request failed with error: \(response.result.error ?? "" as! Error)")
if response.result.error?._code == NSURLErrorTimedOut {
//TODO: show response time out alert or message here
} else {
//TODO: show response failure alert or message here
}
/* Hide loader here */
completion(JSON.null)
}
}
} else {
print("No internet connection")
//TODO: show no internet connection alert or message here
let json: JSON = ["status": "nointernet",
"code": 503]
completion(json)
}
}
}
然后在需要的时候调用如下
func callWebService() {
let parameters: [String: Any] = ["key": "value"] //for post request
let headers: [String: String] = ["key": "value"]
let url = //your url here
WebService.requestService(url: url, method: .post, parameters: parameters, headers: headers, showLoaderFlag: true, viewController: self, completion: { response in
guard response["code"].int != 503 else {
print("No internet connection")
return
}
guard response != .null else {
return
}
/* Handle your success response here */
})
}
关于ios - 如何为 Alamofire 响应设置委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50961933/