2016-07-25 14:34:41 Mayerlucky 阅读数 3326

  首次使用Markdown编写博客,尚在熟悉中。既然markdown支持HTML,那就暂且用HTML书写,回顾下淡忘的html标签。

首先创建一个swift工程,然后准备一个Swift类RedView和一个OC类BlueView相互桥接互用。

Swift调用OC类

方法一

  直接新建一个oc类,如下图:

  继续点击,出现重要提示,如图:

此提示会询问你是否配置一个OC的桥接头文件。点击确定,xcode会帮您配置,否则,用到的时候需要您手动配置。
OC桥接头文件如何使用? – 其实只需要在桥接头文件中导入所需要的调用的OC类就ok了。
点击创建桥接头文件,可以看到:

初始化BlueView.m和添加方法,且在桥接头文件中导入BlueView.h,如图:

在Swift中调用BlueView类和模拟器显示结果

方法二

手动添加桥接头文件


首先删除Xcode自动添加的桥接头文件,自己手动创建个头文件,命名为Handle-Bridging-Header.h,命名建议和Xcode自动创建的命名一样,增强通用性和可读性。

此时仅仅是创建了一个头文件,还没有对应给OC的桥接头文件,所以下面需要把手动创建的头文件变成桥接头文件。
点击target–>build setting.找到swift complier-code generation ,然后定位到 Object-C Bridging Header如图:

可以看到桥接路径定位缓存的仍然是xcode自动创建的路径,但是是找不到的。我们已经给删除了。然后绑定我们自己创建的头文件。

注意路径不要出错


运行结果仍然是好使的。如图:

OC类中调用Swift类

同样,OC中调用swift类必须导入swift的头文件,但是swift中不存在.h和.m之分,因此也需要桥接头文件

但是Swift转化成OC的桥接,从项目一建立就已经配置好了。不需要我们手动创建。这个桥接头文件究竟在哪呢?仍然来到swift compiler - code generation处。

定位到Objective-C Generated Interface Header Name,已经生成的OC接口头文件名,也就是Swift转OC的桥接头文件。OCAndSwift-Swift.h是隐藏的,在finder中找不到此文件。
注意:Objective-C Bridging Header对应的是路径,路径最后的部分是OC转Swift的桥接文件名;而Objective-C Generated Interface Header Name 对应的直接就是文件名,其实也是个路径,只不过直接位于项目工程下,且隐藏。


在使用的时候,只需要在OC类中导入文件名即可


在RedView.swift中的实现 和 在BlueView.m中新加入的方法(为了测试OC调用swift)如图:


测试OC调用Swift模拟器结果

重点说明下Swif转OC的桥接头文件

在finder中无法找到桥接文件,但是可以点击导入的头文件进入到文件名中查看里面内容

可以看到,目前工程中的三个swift文件转OC的结果。理论上来说Swift转OC的桥接头文件也可以自己创建,但是里面转化内容比较复杂,不像OC转Swift直接导进头文件即可。因此建议不要手创建。

2017-05-23 12:15:55 SharkToping 阅读数 529

一、在OC文件中调用Swift代码需要导入一个#import <工程名-Swift.h>的头文件、该文件编译一下就会由系统创建,并且是不可见的。

二、有‘工程名-Bridging-Header’这样的头文件

     该文件是自动创建的在swift中调用OC代码使用的桥接文件,需要将在Swift中使用的OC的相关头文件添加在此处,

如没有该文件则需要如下操作:

1、手动创建一个头文件(名称不限)。

2、在Build Settings中搜索Objective-C Bridging Header。

3、将该文件相对于工程的路径填入该项。


2017-06-09 16:03:52 Q_Q33757152 阅读数 269

项目中 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


2017-06-16 09:47:10 liuxu0718 阅读数 944

无论是swift里拖oc代码还是oc拖swift,Xcode都会自动创建桥接文件。

实际应用场景也就分为上述两种, 当oc引swift时桥接文件里不需要做操作,需要在你需要引入swift类的那个类里 #import <你的项目名字-Swift.h>,这时就可以正常使用swift的类了

当swift引入oc时,桥接文件里直接import oc的类就可以了。 #import "OCViewController.h" 类似这样。

2016-12-19 21:30:30 Dr_Enhart 阅读数 358

正常情况下在Swift工程中是不能使用OC的代码的.但是我们可以使用桥接来实现.

首先在根目录中创建一个名为Bridge.h的Header File.


接下来在工程的Build Settings中找到Objective-C Bridging Header并将他的值设置成 工程名/Header File文件名.比如说我的工程名字叫桥接,刚刚创建的Header File叫Bridge.h,那么这里就填 桥接/Bridge.h.


最后在我们创建的Header File文件中将OC代码的头文件写在里面就可以实现桥接.以AFNetworking为例:




OC与swift相互调用

阅读数 239

没有更多推荐了,返回首页