调用swift文件中的objective-C属性块时,完成块属性为零

调用swift文件中的objective-C属性块时,完成块属性为零,objective-c,swift,completion-block,Objective C,Swift,Completion Block,我有一个objective-c viewcontroller类,它在 //UAEPassWebViewController.h @property (nonatomic, copy) void (^onUAEPassSuccessBlock)(NSString *response); @property (nonatomic, copy) void (^onUAEPassFailureBlock)(NSString *response); 我已经创建了桥接头.h类,并尝试调用swift类中的代

我有一个objective-c viewcontroller类,它在 //UAEPassWebViewController.h

@property (nonatomic, copy) void (^onUAEPassSuccessBlock)(NSString *response);
@property (nonatomic, copy) void (^onUAEPassFailureBlock)(NSString *response);
我已经创建了桥接头.h类,并尝试调用swift类中的代码,如下所示

webVC.onUAEPassSuccessBlock = { (code: String) in
            print(code)
            if (code != "") {
                self.showHud()
                self.getUaePassTokenForCode(code)
            }
            } as? (String?) -> Void
但在中执行代码时,onUAEPassSuccessBlock属性变为零 //UAEPassWebViewController.m

if(_onUAEPassSuccessBlock && code) {
            _onUAEPassSuccessBlock(code);
            [self.navigationController popViewControllerAnimated:true];
        }
 webVC.onUAEPassSuccessBlock = ^(NSString *code) {

            if(code) {

                [self showLoadingIndicator];
                [self getUaePassTokenForCode:code];
            }
        };
这只发生在我从swift班级打电话时。如果我从objective-c类调用相同的属性,那么下面的代码工作得很好。 //ViewController.m

if(_onUAEPassSuccessBlock && code) {
            _onUAEPassSuccessBlock(code);
            [self.navigationController popViewControllerAnimated:true];
        }
 webVC.onUAEPassSuccessBlock = ^(NSString *code) {

            if(code) {

                [self showLoadingIndicator];
                [self getUaePassTokenForCode:code];
            }
        };

任何人都可以帮助我,请

该值为零,因为这是您在添加
为时要求的值?(字符串?->Void
。这表示“如果无法将其转换为给定类型,则返回nil。”无法将此函数转换为正确的类型,因此它是nil

您编写的函数是
(String)->Void
。不能将其隐式转换为
(字符串?->Void
。如果第一个函数接收到
nil
,它会做什么

使用
\u Nonnull
重写您的ObjC,使其在此位置不允许nil:

@property (nonatomic, copy) void (^onUAEPassSuccessBlock)(NSString * _Nonnull response);
或者重写函数以接受
字符串?

webVC.onUAEPassSuccessBlock = { (code: String?) in
...

谢谢你罗布·纳皮尔,这对我很有用:)我按照你上面的建议做了改变