迁移到 swift - 完成处理程序的问题

埃拉古马特

我正在尝试从 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中是否常见):

一个叫'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 类看来,如果我只能得到第二个,所以我根本无法转换该方法。

这不是我第一次遇到 completionHandlers 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
因德尔·库马尔·拉托尔

嘿,编译器似乎想知道所有信息以使这些方法可用于 swift。

所以代替

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从Swift 2.3迁移到Swift 3时出现的问题

来自分类Dev

迁移到Swift 3后对Alamofire的成员request()问题的含糊不清的引用

来自分类Dev

将ObjC NSNumber代码迁移到Swift并显示数字时遇到问题。

来自分类Dev

是否需要从Swift 2迁移到Swift 2.1?

来自分类Dev

在Xcode 8中从Swift 2.2迁移到Swift 3.0

来自分类Dev

将以Swift 3.0编写的模块迁移到Swift 2.3?

来自分类Dev

代码从 swift 2.0 迁移到 swift 3.0 后发生错误

来自分类Dev

从AFNetworking 1.3迁移到AFNetworking 2.0的问题

来自分类Dev

将数据从mssql迁移到mysql问题

来自分类Dev

从Byte Buddy 0.7.7迁移到1.0.2的问题

来自分类Dev

从Wagtail 2.7.1迁移到2.7.4的问题

来自分类Dev

htaccess从Apache迁移到LiteSpeed的问题

来自分类Dev

Rails迁移到Postgres问题(时间)

来自分类Dev

关于在 VSTS 上迁移到 Git 的问题?

来自分类Dev

从 Windows 迁移到 Ubuntu 后的问题

来自分类Dev

Apache poi 迁移到 jdk 11 问题

来自分类Dev

将引导程序迁移到EBDA中?

来自分类Dev

从引导程序2.3.2迁移到3.1.1

来自分类Dev

将C程序从Linux迁移到Windows

来自分类Dev

迁移到应用程序的 flatpak 版本

来自分类Dev

Swift完成处理程序语法

来自分类Dev

Swift中的完成处理程序

来自分类Dev

完成处理程序-解析+ Swift

来自分类Dev

完成处理程序-解析+ Swift

来自分类Dev

引导程序迁移到3.0分页列表问题

来自分类Dev

Swift应用迁移问题

来自分类Dev

用户默认值从Obj C迁移到Swift

来自分类Dev

迁移到Swift 4.2后模糊使用“过滤器”

来自分类Dev

迁移到Swift 2后,Pusher Websocket无法连接