-1

属性块变为零我有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

但是在执行 //UAEPassWebViewController.m 中的代码时,onUAEPassSuccessBlock 属性变为零

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];
            }
        };

任何人都可以帮助我

4

1 回答 1

0

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

你写的函数是(String) -> Void. 您不能将其隐式转换为(String?) -> Void. 如果收到第一个函数会做什么nil

使用以下命令重写您的 ObjC 以不允许在此位置出现 nil _Nonnull

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

或者重写函数来接受String?

webVC.onUAEPassSuccessBlock = { (code: String?) in
...
于 2019-07-14T13:31:13.453 回答