Я нашел одно решение, но я не доволен им.
Если кто-то даст лучшее решение, я буду рад за него. В этом решении мне не нравится создавать новый протокол, который я должен наследовать в части Swift (создать новый класс или наследовать его в существующем SwiftViewcontroller, не имеет значения)
Один из способов - создать @protocol
внутри Objective-C:
@protocol ObjC_ManagerDelegate
-(void) signCallBack: (UIImage *)image;
@end
ViewController_obj_c.h:
@interface ViewController_obj_c : UIViewController <UIPopoverPresentationControllerDelegate>
@property (nonatomic, strong) id <ObjC_ManagerDelegate>delegate;
- (IBAction)Done_Clicked:(id)sender;
@end
ViewController_obj_c.m:
- (IBAction)Done_Clicked:(UIButton *)sender
{
UIGraphicsBeginImageContext(_dV.bounds.size);
[_dV.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[self.delegate signCallBack:image];
}
И часть Swift выглядит так. Создайте новый класс и унаследуйте его от ObjC_ManagerDelegate
:
class SwiftmanagerDelegate: ObjC_ManagerDelegate {
func signCallBack(_ image: UIImage!) {
// do something
}
}
и, наконец, заполнить новый класс в качестве делегата
SwiftViewController.swift:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showModalSegue" {
if let nextVC = segue.destination as? ViewController_obj_c {
nextVC.delegate = SwiftmanagerDelegate()
}
}
}