在swift文件中调用Objective-C Property块,完成块的属性为nil

时间:2019-07-14 09:50:59

标签: objective-c swift completion-block

property block getting nil我有Objective-C ViewController类,它在其中有一个属性块 // UAEPassWebViewController.h

@property (nonatomic, copy) void (^onUAEPassSuccessBlock)(NSString *response);
@property (nonatomic, copy) void (^onUAEPassFailureBlock)(NSString *response);

我制作了bridging-header.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];
        }

这仅在我从swift班级打电话时发生。如果我从Objective-C类调用相同的属性,则下面的代码可以正常工作。 // ViewController.m

 webVC.onUAEPassSuccessBlock = ^(NSString *code) {

            if(code) {

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

任何人都可以帮助我

1 个答案:

答案 0 :(得分:0)

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

您编写的函数为(String) -> Void。您不能将其隐式转换为(String?) -> Void。如果第一个函数收到nil,该怎么办?

使用_Nonnull将ObjC重写为不允许nil在这个位置:

@property (nonatomic, copy) void (^onUAEPassSuccessBlock)(NSString * _Nonnull response);

或重写该函数以接受String?

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