微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何使用协议委托将数据从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 举报,一经查实,本站将立刻删除。