如何使用协议委托将数据从swift传递到objective c?

问题描述

我有一个目标 c 的项目。

目标 c -> swift -> 返回目标 c

为了按此顺序传递 UIImage 数据,我的工作如下。

但是,我成功地将 UIImage 数据从目标 c 传递给了 swift,但未能将数据传递回目标 c。

原因是 swift 中的委托为零。

如果您告诉我下面代码中出现问题的地方,我将不胜感激。

Viewcontroller.h

#import <UIKit/UIKit.h>
@protocol imageDelegate <NSObject>

-(void)send: (UIImage *)sendImage;

@end

@interface ViewController : UIViewController<UIImagePickerControllerDelegate,UINavigationControllerDelegate,imageDelegate> {
    UIImagePickerController *imagePickerController;
    
}
@property (nonatomic,weak) id<imageDelegate> delegate;
@end

Viewcontroller.m

#import "ViewController.h"
#import "imagePointer-Swift.h"

@interface ViewController ()<imageDelegate>
@property (weak,nonatomic) IBOutlet UIImageView *imageView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    imagePickerController = [[UIImagePickerController alloc] init];
    imagePickerController.delegate = self;
}

- (IBAction)btnPhoto:(id)sender {
    imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    [self presentViewController:imagePickerController animated:YES completion:nil];
}

-(void)send: (UIImage *)sendImage {
    _imageView.image = sendImage;
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediawithInfo:(NSDictionary *)info {

   UIImage *pickedImage = info[UIImagePickerControllerOriginalImage];
    
    if (pickedImage) {
        NSLog(@"picked : %@",pickedImage);
    }
    [self dismissViewControllerAnimated:YES completion:nil];
    
    ScViewController *scv = [[ScViewController alloc] initWithNibName:@"ScViewController" bundle:nil];
    scv.img = pickedImage;
    NSLog(@"scv.imgView : %@",scv.img);
    [self presentViewController:scv animated:YES completion:nil];
}

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
    [self dismissViewControllerAnimated:YES completion:nil];
}

@end

bridging-header.h

#import"ViewController.h"

ScViewController.swift

import UIKit

@objc class ScViewController: UIViewController {
    
    @objc(img)
    
    var img:UIImage!   
    var arrowImageView: UIImageView = UIImageView()
    var delegate : imageDelegate!    
    @IBOutlet weak var imgView: UIImageView!
        
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        imgView.image = img
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    @IBAction func btnSave(_ sender: Any) {    
        if delegate == nil{
            print("delegate : nil") // I don't kNow why delegate is nil
        }else{
            delegate.send(imgView.image)
        }
        self.dismiss(animated: true,completion: nil)
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)