• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

iOS - OC 与 Swift 桥接

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

项目中 OC 和 Swift 的类来回跳转,桥接问题

我们知道Swift中自定义的类不需要导入头文件,编译器会自动帮我们导入。那么Objective-C怎么做呢?

跟着网上教程,当我们创建以Swift为语言的工程后,在第一次创建或拖入OC语言的文件时会自动弹出一个对话框,如下:

该提示的意思是,是否创建一个Objective-C bridging header,也就是创建一个Swift中能调到OC的桥文件。我们点击回车,会自动创建一个名叫  你的项目名(默认)-Bridging-Header.h  的头文件。这文件是干什么用的呢?

  我们点开这个文件,里面只有这样一行注释:


以我不怎么样的英语造诣,直译如下:

  使用这个文件来导入你想导入到Swift中的(OC)目标头文件.h。

  简单明了。接下来怎么做?

  直接在这个文件中导入头文件,之后你可以在Swift语言中直接使用,就像Swift类一样。

导入头文件:

//

//  Use this file to import your target's public headers that you would like to expose to Swift.

//


#import "BoxHomeViewController.h"


然后就可以在swift里面调用oc的类了,如

  

 let  vc = BoxHomeViewController()

        

        

self.navigationController?.pushViewController(vc, animated: true)



  另外有一点,若你导入头文件后仍然无效,那么除了编译下看看效果之外,还可以设置下项目的Target - - Build Settings--Swift Compiler--Objective-C Bridging Header内容为你的项目名字(默认)/Bridging-Header.h,这个与Bridging-Header.h位置有关,从项目的根目录开始在Objective-C Bridging Header选项里面写入Bridging-Header.h相对路径。(这个路径编译后默认自动填充,如果无效,提示错误,则可能需要手动导入该路径)
在 OC 类 里面调用Swift,也不难


首先,我们需要到Target - - Build Settings--Packging--Defines Module,将值改为YES。

然后,我们到所想要调用Swift类的OC类中,调用这样一个头文件:

  #import <你的项目名-Swift.h>

  若你没有修改,一般都是你的项目名。你可能会想,我并没有创建这样一个头文件。但是要仔细看,它使用的是尖括号<>,这说明它是系统类,你是看不到的。

如 : 


#import "BoxHomeViewController.h"

#import <BoxSwiftDemo-Swift.h>



@interface BoxHomeViewController ()


@end


@implementation BoxHomeViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view.

    self.view.backgroundColor = [UIColor lightGrayColor];

    

    self.navigationItem.title = @"OC的类";

    

    UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];;

    button.frame = CGRectMake(50, 150, 100, 50);

    button.backgroundColor = [UIColor greenColor];

    [button setTitle:@"Swift类看看" forState:UIControlStateNormal];

    [button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];

    [button addTarget:self action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:button];

    

    

}


#pragma mark - 跳往swift方法

- (void)buttonClick {

    

    // 这里 SecondViewController.swift swift文件

    

    SecondViewController *second = [[SecondViewController alloc] init];

    [self.navigationController pushViewController:second animated:YES];

}


本文参考自http://www.cnblogs.com/SoulKai/p/5800133.html



鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
swift UI专项训练19 TextView 多行文本发布时间:2022-07-14
下一篇:
Swift结构体与类发布时间:2022-07-14
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap