Используйте любую библиотеку индикатора активности с Moya - PullRequest
0 голосов
/ 17 декабря 2018

Я использую Моя сеть в моем проекте iOS.Я создал класс, у которого есть метод ниже:

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 .Как это сделать?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018
    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

    }
0 голосов
/ 17 декабря 2018

Попробуйте это ...

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()
})
...