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];
}
};
任何人都可以帮助我
答案 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
...