在 Moya 中使用任何 Activity 指标库
Use any Activity Indicator library with Moya
我在 iOS 项目中使用 Moya Networking。我做了一个 class 有下面的方法:
class UserAdapter{
static func getUsers(amount:Int=2, gender:Gender = .Male, success successCallback: @escaping ([UserModelMain]) -> Void, error errorCallback: @escaping (Swift.Error) -> Void, failure failureCallback: @escaping (MoyaError) -> Void) {
let endpointClosure = { (target: UserTarget) -> Endpoint<UserTarget> in
let defaultEndpoint = MoyaProvider.defaultEndpointMapping(for: target)
return defaultEndpoint.adding(newHTTPHeaderFields: ["": ""])
}
let provider = MoyaProvider<UserTarget>(endpointClosure: endpointClosure, plugins: [NetworkLoggerPlugin(verbose: true), NetworkActivityPlugin(networkActivityClosure: { (activity, target) in
switch activity
{
case .began:
print("Network Activity began")
UIApplication.shared.isNetworkActivityIndicatorVisible = true
case .ended:
print("Network Activity ended")
UIApplication.shared.isNetworkActivityIndicatorVisible = false
}
})])
provider.request(.getUsers(amount: amount, gender: gender)) { (result) in
switch result {
case .success(let response):
//TODO
}
}
} }
我从我的视图控制器中调用它:
UserAdapter.getUsers(amount: 8, gender: .Female, success: { (response) in
}, error: { (error) in
// show error from server
}, failure: { (error) in
// show Moya error
})
而不是 UIApplication.shared.isNetworkActivityIndicatorVisible
我需要使用任何自定义加载库,例如 NVActivityIndicatorView。如何做到这一点?
试试这个...
print("Network Activity began")
Helper.showHUD()
UserAdapter.getUsers(amount: 8, gender: .Female, success: { (response) in
print("Network Activity ended")
Helper.hideHUD()
}, error: { (error) in
// show error from server
print("Network Activity ended")
Helper.hideHUD()
}, failure: { (error) in
// show Moya error
print("Network Activity ended")
Helper.hideHUD()
})
static func getUsers(amount:Int=2,
gender:Gender = .Male,
success successCallback: @escaping ([UserModelMain]) -> Void,
error errorCallback: @escaping (Swift.Error) -> Void,
failure failureCallback: @escaping (Moya.MoyaError) -> Void,
progress progressCallback: ProgressBlock?,
activity networkActivityCallback: @escaping (_ change: NetworkActivityChangeType) -> Void) {
let userProvider = MoyaProvider<UserTarget>(endpointClosure: { (target: UserTarget) -> Endpoint<UserTarget> in
let defaultEndpoint = MoyaProvider.defaultEndpointMapping(for: target)
return defaultEndpoint.adding(newHTTPHeaderFields: ["": ""])
}, plugins: [NetworkLoggerPlugin(verbose: true), NetworkActivityPlugin(networkActivityClosure: { (activity, target) in
UIApplication.shared.isNetworkActivityIndicatorVisible = (activity == .began)
networkActivityCallback(activity)
switch activity
{
case .began:
print("Network Activity began")
case .ended:
print("Network Activity ended")
}
})])
//Other statements
}
从工作项目中复制粘贴
我遇到过这个问题,这里是解决方案。
网络管理员
class HomeNetworkManager: HomeNetworkable
{
// MARK: Properties
private let provider: MoyaProvider<HomeAPI>
// MARK: Initiallization
init(provider: MoyaProvider<HomeAPI>)
{
self.provider = provider
}
convenience init()
{
let networkActivityClosure: NetworkActivityPlugin.NetworkActivityClosure = { (activity, _) in
switch activity
{
case .began:
Activity.startAnimating()
case .ended:
Activity.stopAnimating()
}
}
var plugins : [PluginType] = []
let networkActivityPlugin = NetworkActivityPlugin(networkActivityClosure: networkActivityClosure)
plugins.append(networkActivityPlugin)
let networkLogger = NetworkLoggerPlugin(verbose: true)
plugins.append(networkLogger)
let provider = MoyaProvider<HomeAPI>(plugins: plugins)
self.init(provider: provider)
}
// MARK: Methods - Methods defined in HomeNetworkable Protocol
}
然后轻松使用它并免费获得 activity 指标:
let homeNetworkManager = HomeNetworkManager()
Note : Activity
is a class with static methods shows my custom activity indicator.
祝你好运!
我在 iOS 项目中使用 Moya Networking。我做了一个 class 有下面的方法:
class UserAdapter{
static func getUsers(amount:Int=2, gender:Gender = .Male, success successCallback: @escaping ([UserModelMain]) -> Void, error errorCallback: @escaping (Swift.Error) -> Void, failure failureCallback: @escaping (MoyaError) -> Void) {
let endpointClosure = { (target: UserTarget) -> Endpoint<UserTarget> in
let defaultEndpoint = MoyaProvider.defaultEndpointMapping(for: target)
return defaultEndpoint.adding(newHTTPHeaderFields: ["": ""])
}
let provider = MoyaProvider<UserTarget>(endpointClosure: endpointClosure, plugins: [NetworkLoggerPlugin(verbose: true), NetworkActivityPlugin(networkActivityClosure: { (activity, target) in
switch activity
{
case .began:
print("Network Activity began")
UIApplication.shared.isNetworkActivityIndicatorVisible = true
case .ended:
print("Network Activity ended")
UIApplication.shared.isNetworkActivityIndicatorVisible = false
}
})])
provider.request(.getUsers(amount: amount, gender: gender)) { (result) in
switch result {
case .success(let response):
//TODO
}
}
} }
我从我的视图控制器中调用它:
UserAdapter.getUsers(amount: 8, gender: .Female, success: { (response) in
}, error: { (error) in
// show error from server
}, failure: { (error) in
// show Moya error
})
而不是 UIApplication.shared.isNetworkActivityIndicatorVisible
我需要使用任何自定义加载库,例如 NVActivityIndicatorView。如何做到这一点?
试试这个...
print("Network Activity began")
Helper.showHUD()
UserAdapter.getUsers(amount: 8, gender: .Female, success: { (response) in
print("Network Activity ended")
Helper.hideHUD()
}, error: { (error) in
// show error from server
print("Network Activity ended")
Helper.hideHUD()
}, failure: { (error) in
// show Moya error
print("Network Activity ended")
Helper.hideHUD()
})
static func getUsers(amount:Int=2,
gender:Gender = .Male,
success successCallback: @escaping ([UserModelMain]) -> Void,
error errorCallback: @escaping (Swift.Error) -> Void,
failure failureCallback: @escaping (Moya.MoyaError) -> Void,
progress progressCallback: ProgressBlock?,
activity networkActivityCallback: @escaping (_ change: NetworkActivityChangeType) -> Void) {
let userProvider = MoyaProvider<UserTarget>(endpointClosure: { (target: UserTarget) -> Endpoint<UserTarget> in
let defaultEndpoint = MoyaProvider.defaultEndpointMapping(for: target)
return defaultEndpoint.adding(newHTTPHeaderFields: ["": ""])
}, plugins: [NetworkLoggerPlugin(verbose: true), NetworkActivityPlugin(networkActivityClosure: { (activity, target) in
UIApplication.shared.isNetworkActivityIndicatorVisible = (activity == .began)
networkActivityCallback(activity)
switch activity
{
case .began:
print("Network Activity began")
case .ended:
print("Network Activity ended")
}
})])
//Other statements
}
从工作项目中复制粘贴
我遇到过这个问题,这里是解决方案。
网络管理员
class HomeNetworkManager: HomeNetworkable
{
// MARK: Properties
private let provider: MoyaProvider<HomeAPI>
// MARK: Initiallization
init(provider: MoyaProvider<HomeAPI>)
{
self.provider = provider
}
convenience init()
{
let networkActivityClosure: NetworkActivityPlugin.NetworkActivityClosure = { (activity, _) in
switch activity
{
case .began:
Activity.startAnimating()
case .ended:
Activity.stopAnimating()
}
}
var plugins : [PluginType] = []
let networkActivityPlugin = NetworkActivityPlugin(networkActivityClosure: networkActivityClosure)
plugins.append(networkActivityPlugin)
let networkLogger = NetworkLoggerPlugin(verbose: true)
plugins.append(networkLogger)
let provider = MoyaProvider<HomeAPI>(plugins: plugins)
self.init(provider: provider)
}
// MARK: Methods - Methods defined in HomeNetworkable Protocol
}
然后轻松使用它并免费获得 activity 指标:
let homeNetworkManager = HomeNetworkManager()
Note :
Activity
is a class with static methods shows my custom activity indicator.
祝你好运!