Миграция на swift - проблема с обработчиками завершения - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь «перевести» метод из Objective C, потому что я лучше работаю со swift, но получаю одну ошибку, которую не могу решить.

Это метод:

+(void) getFormObjectForWorkflowTypeId: (NSNumber *) workflowTypeId andEmployeeId: (NSNumber *) employeeId onCompletion: (void (^)(VOCForm *form)) completionHandler {

    VOCGetFormRC *configuration = [[VOCGetFormRC alloc] initWithWorkflowTypeId: workflowTypeId andEmployeeId: employeeId];
    VOCNetworkManager *networkManager = [VOCNetworkManager sharedManager];
    [networkManager startRequestWithConfiguration: configuration
                                        onSuccess:^(NSArray * _Nonnull jsonResponse) {

                                            BOOL responseState = [jsonResponse valueForKey:@"success"];

                                            if (responseState) {

                                                NSDictionary *formData = [[[jsonResponse valueForKey: @"data"] valueForKey: @"elements"] valueForKey: @"form"];

                                                NSError *error;
                                                VOCForm *form = [[VOCForm alloc] initWithDictionary: formData error: &error];

                                                if (error) {

                                                    [VOCLogUtils printLogForClass: self methodName: NSStringFromSelector(_cmd) andError: error];

                                                    if (completionHandler) {
                                                        completionHandler (nil);
                                                    }
                                                }
                                                else {

                                                    if (completionHandler) {
                                                        completionHandler (form);
                                                    }
                                                }
                                            }
                                            else {

                                                if (completionHandler) {
                                                    completionHandler(nil);
                                                }
                                            }
                                        }
                                        onFailure:^(VOCNetworkManagerResponse *networkManagerResponse) {

                                            if (completionHandler) {
                                                completionHandler(nil);
                                            }
                                        }];
}

и проблема возникает в самом начале, когда я пытаюсь вызвать

networkManager.startRequest

XCode автоматически завершает метод с помощью "onCompletion" вместоиз onSuccess.И он все равно не распознает «jsonResponse».

в классе VOCNetworkManager есть два метода с одинаковыми именами (я не знаю, обычно ли это в Objective C):

oneвызывая onSucces

-(void) startRequestWithConfiguration: (VOCRequestConfiguration *) configuration onSuccess: (void ( ^ _Nonnull)(NSArray * _Nonnull jsonResponse)) success
                        onFailure: (void (^)(VOCNetworkManagerResponse *networkManagerResponse)) failure {
//NSLog(@"STARTING REQUEST NETWORK MANAGER");
NSString *url = [NSString stringWithFormat: @"%@%@", configuration.baseUrl, configuration.endPoint];

, а второй вызывает onCompletion

-(void) startRequestWithConfiguration: (VOCRequestConfiguration *) configuration onCompletion: (void (^)(NSDictionary *jsonResponse, NSError *error)) completionHandler {

NSString *url = [NSString stringWithFormat: @"%@%@", configuration.baseUrl, configuration.endPoint];

[[self getNetworkingManager] POST: url parameters: configuration.parameters progress: nil
                          success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

, но из моего класса Swift похоже, что я могу получить только второй, поэтому я могуне конвертировать метод вообще.

Это не первый раз, когда у меня возникают проблемы с завершениемHandlers tbh

Заголовочный файл

#import <Foundation/Foundation.h>

@class VOCRequestConfiguration;
@class VOCNetworkManagerResponse;
@class VOCMultipartRequestConfiguration;

@interface VOCNetworkManager : NSObject

+(id _Nullable) sharedManager;

-(void) startRequestWithConfiguration: (VOCRequestConfiguration *_Nullable) configuration onSuccess: (void ( ^ _Nonnull)( NSArray * _Nonnull jsonResponse)) success
                            onFailure: (void (^_Nullable)(VOCNetworkManagerResponse * _Nullable networkManagerResponse)) failure;

-(void) startApplicationJSONContentRequestWithConfiguration: (VOCRequestConfiguration *_Nullable) configuration onSuccess: (void ( ^ _Nonnull)( NSArray * _Nonnull jsonResponse)) success
                            onFailure: (void (^_Nullable)(VOCNetworkManagerResponse * _Nullable networkManagerResponse)) failure;

-(void) startRequestForFile: (VOCMultipartRequestConfiguration *_Nullable) configuration onSuccess: (void (^_Nullable)(NSArray * _Nullable response)) success onFailure: (void (^_Nullable)(void)) failure;

-(void) startRequestWithConfiguration: (VOCRequestConfiguration *_Nullable) configuration onCompletion: (void (^_Nullable)(NSDictionary * _Nullable jsonResponse, NSError * _Nullable error)) completionHandler;

-(void) uploadFile: (VOCMultipartRequestConfiguration *_Nullable) configuration onSuccess: (void (^_Nullable)(NSArray * _Nullable response)) success onFailure: (void (^_Nullable)(void)) failure;

@end

1 Ответ

0 голосов
/ 13 марта 2019

Эй, похоже, что компилятор хочет знать всю информацию, чтобы сделать эти методы доступными для swift.

Так что вместо

@class VOCRequestConfiguration;
@class VOCNetworkManagerResponse;
@class VOCMultipartRequestConfiguration;

использование

#import "VOCRequestConfiguration.h"
#import "VOCNetworkManagerResponse.h"
#import "VOCMultipartRequestConfiguration.h"
...