【发布时间】:2021-07-27 13:58:15
【问题描述】:
我想创建自己的网络管理器类,这样我就可以像没有互联网一样在全局范围内处理错误,然后我只能显示该类的弹出窗口。我正在为此使用 Alomofire,并且还想在 swiftjson 库的帮助下解析 JSON 中的数据。我已尝试使用我的代码,但无法将数据从我的网络类传递到调用函数的位置。
import UIKit
import Alamofire
import SwiftyJSON
import SystemConfiguration
class WebServiceHelper: NSObject {
typealias SuccessHandler = (JSON) -> Void
typealias FailureHandler = (Error) -> Void
// MARK: - Internet Connectivity
class func isConnectedToNetwork() -> Bool {
var zeroAddress = sockaddr_in()
zeroAddress.sin_len = UInt8(MemoryLayout<sockaddr_in>.size)
zeroAddress.sin_family = sa_family_t(AF_INET)
guard let defaultRouteReachability = withUnsafePointer(to: &zeroAddress, {
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
SCNetworkReachabilityCreateWithAddress(nil, $0)
}
}) else {
return false
}
var flags: SCNetworkReachabilityFlags = []
if !SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) {
return false
}
let isReachable = flags.contains(.reachable)
let needsConnection = flags.contains(.connectionRequired)
return (isReachable && !needsConnection)
}
// MARK: - Helper Methods
class func getWebServiceCall(_ strURL : String, isShowLoader : Bool, success : @escaping SuccessHandler, failure : @escaping FailureHandler) {
if isConnectedToNetwork() {
print(strURL)
if isShowLoader == true {
//AppDelegate.getDelegate().showLoader()
}
AF.request(strURL).responseJSON { (resObj) -> Void in
print(resObj.result)
}
}else {
//CommonMethods.showAlertWithError("", strMessage: Messages.NO_NETWORK, withTarget: (AppDelegate.getDelegate().window!.rootViewController)!)
}
}
}
// 从控制器调用
func getData() {
WebServiceHelper.getWebServiceCall("http://3.16.229.165/webservice/getFollowingList", isShowLoader: false, success: { (responceObj) in
print("success => \(responceObj)")
}
, failure: { (failureObj) in
print("failureObj = \(failureObj)")
})
}
// API 响应数据
{
"status": false,
"followers": false,
"message": "You are not yet following anyone"
}
【问题讨论】: