Цель-C и AFNetworking


Это объективный-C и о запросе сетей. Просто установите AFNetWorking менеджером и получить имя метода из списков ниже (это все после запроса).

Таким образом мы принимаем сейчас довольно странно. Если есть другой способ, чтобы добавить, просто добавьте в список. Должен ли я объединить список в один метод? Я буду использовать enum и словарь. Есть ли лучшее решение?

Я знаю один способ предоставления запроса на обработку каждого запроса сети. Он будет наследовать и переопределить некоторые методы для определения пользовательских запросов в проекте. Основная идея-использовать команду рисунок.

@implementation SSOHttpRequestManager
/**
 @param msg_type , method name ,  X-METHOD
 @param version
 @param dataDict request data
 @param encrypt whether or not
 @param success callback
 @param failure callback
 */
+ (void)baseNetWorkType:(NSString *)msg_type
                version:(NSString *)version
               dataDict:(NSDictionary *)dataDict
              isEncrypt:(BOOL)encrypt
                success:(SuccessBlock)success
                failure:(FailureBlock)failure
{
    AFHTTPSessionManager *manager = [NetManager shareAFManager];
    [manager.requestSerializer setValue:msg_type forHTTPHeaderField:@"X-METHOD"];
    //设置请求体数据
    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    NSString *dataStr ;//...
    if (encrypt) {  //...  }
    [dict setValue:dataStr forKey:@"data"];// @"version"      @"digest"
    [manager POST: K_SSO_URL parameters:dict progress:^(NSProgress * _Nonnull uploadProgress) {
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSDictionary *responseDict = (NSDictionary *)responseObject;
        if([[responseDict valueForKey:@"code"] isEqual: @600]){
            //....   [[AppManager sharedInstance] tokenInvalidQuit];
            return;
        }
        NSString *responseMessage = [responseDict valueForKey:@"msg"];
        NSString *statusCode = [responseDict valueForKey:@"code"];
        NSString *responseData = [responseDict valueForKey:@"data"];
        if ([statusCode isEqualToString: @"S200"]) {
            success(responseDict,responseData,responseMessage);
        }else{
            failure(statusCode,responseMessage);
        }
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        failure(@"-1",_NET_ERROR);
    }];
}

#pragma mark judge network
+(BOOL)isConnectionAvailable{
    BOOL isExistenceNetwork = YES;
    //....
    return isExistenceNetwork;
}

#pragma mark -- sendVerifyCode
+ (void)sendVerifyCodeParams:(NSDictionary *)params success:(SuccessBlock)success
                     failure:(FailureBlock)failure{
    [SSOHttpRequestManager baseNetWorkType:@"sendVerifyCode" version:DEFALUT_VERSION dataDict:params isEncrypt:NO success:^(id response, id data, NSString *Message) {
        success(response,data,Message);
    } failure:^(NSString *statusCode, NSString *Message) {
        failure(statusCode,Message);
    }];
}

#pragma mark -- register
+ (void)registerParams:(NSDictionary *)params success:(SuccessBlock)success
               failure:(FailureBlock)failure{
    [SSOHttpRequestManager baseNetWorkType:@"register" version:DEFALUT_VERSION dataDict:params isEncrypt:YES success:^(id response, id data, NSString *Message) {
        success(response,data,Message);
    } failure:^(NSString *statusCode, NSString *Message) {
        failure(statusCode,Message);
    }];
}

#pragma mark -- login
+ (void)loginParams:(NSDictionary *)params success:(SuccessBlock)success
            failure:(FailureBlock)failure{
    [SSOHttpRequestManager baseNetWorkType:@"login" version:DEFALUT_VERSION dataDict:params isEncrypt:YES success:^(id response, id data, NSString *Message) {
        success(response,data,Message);
    } failure:^(NSString *statusCode, NSString *Message) {
        failure(statusCode,Message);
    }];
}

#pragma mark -- resetPassword
+ (void)findPasswordParams:(NSDictionary *)params success:(SuccessBlock)success
                   failure:(FailureBlock)failure{
    [SSOHttpRequestManager baseNetWorkType:@"resetPassword" version:DEFALUT_VERSION dataDict:params isEncrypt:YES success:^(id response, id data, NSString *Message) {
        success(response,data,Message);
    } failure:^(NSString *statusCode, NSString *Message) {
        failure(statusCode,Message);
    }];
}
@end


Комментарии
1 ответ


  • Не передавайте параметры в через публичный метод. Каковы эти параметры? Сделать сигнатуру метода явной.

Поэтому вместо того, чтобы

+ (void)loginParams:(NSDictionary *)params success:(SuccessBlock)success failure:(FailureBlock)failure

у вас есть

+ (void)loginWithUsername:(NSString *)username password:(NSString *)password success:(SuccessBlock)success failure:(FailureBlock)failure
{
NSDictionary *params = @{ @"username" : username, @"password" : password };


  • Не пользуются успехом и неудачей блоков это как раз и приводит к ненужному дублированию, чтобы справиться с государства не получится. Просто используйте одну завершение блока, как completion:^(BOOL success, NSError *error)completion вы можете также добавить другие возвращают объекты, которые имеют смысл для данного метода.

  • baseNetWorkType:version:dataDict:isEncrypt:success:failure кажется, в основном ненужные, я бы переместить большинство настроек обратно в отдельные методы или просто избавиться от него полностью.

  • Не ставьте класс имя при вызове методов класса внутри одного класса так [SSOHttpRequestManager methodName становится просто [self methodName

0
ответ дан 29 мая 2018 в 06:05 Источник Поделиться