调用swift文件中的objective-C属性块时,完成块属性为零
我有一个objective-c viewcontroller类,它在 //UAEPassWebViewController.h调用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类中的代
@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
...
谢谢你罗布·纳皮尔,这对我很有用:)我按照你上面的建议做了改变