swift oc 混编
2017-10-23 本文已影响42人
Jackson_Z
swift 混编 oc
转自
1.创建swift项目
2.新建oc类
方式一:在一个全新的Swift,利用第一次新建提示的方式自动添加桥接头文件。
这个是在swift项目中,创建其他语言类的时候(OC,C等),系统会提示你添加一个桥接头文件,如图

生成格式为"你的工程名字-Bridging-Header.h"的文件
有的可能是xcode配置问题,没有提示,那也可以自己创建一个,格式得按照以上的格式,但还有一种方式,不仅能创建还可以改变这个格式,取一个自己喜欢的文件名,但需要修改一些配置.
方式二:新建一个头文件,名为:JeckHeader.h
在targets->build settings ->Object-C Bridging Header 位置设为Swift/JeckHeader.h,如下图所示,这个头文件也就是桥接头文件,代码一会儿再说.



** 格式为"工程名-swift.h",它就是项目中所有的swift类的头文件. **
// SwiftClass.swift 类中的代码,这里边只是添加了一个函数,OC的类会调用这个方法
import UIKit
class SwiftClass: NSObject {
func sayHello(name:String) -> String {
let greeting = "Hello" + name + "!"
return greeting
}
}
// OCClass.m OC的.m文件,这里实现了两个方法并定义了一个C语言的函数,为了方便对比,方法里实现了block,在这个类中演示:OC调用swift类中的方法
#import "OCClass.h"
#import "SwiftTest-swift.h"//细心的朋友一定注意到了,项目文件中并没有这个头文件,但实际上项目中是有的,你也可以用command+鼠标左键跳进去查看,是隐藏的,如果你是按照我前边的讲的创建的swift文件,那你在这里是可以导入这个头文件的,格式为"工程名-swift.h",它就是项目中所有的swift类的头文件.
@implementation OCClass
-(void)desc22{
//声明block
int (^p)(int, int);
//把函数赋值给block
p = ^(int a, int b){
return a + b;
};
//使用
int result = p(10,40);
NSLog(@"swift调用OC方法输出result:%d\n",result);
//OC中调用swift函数
SwiftClass *sc = [[SwiftClass alloc] init];//创建swift对象
NSString *str =[sc sayHelloWithName:@"jeck"];//用swift的对象调用自己的函数(方法)
NSLog(@"OC中调用swift函数输出 %@",str);
}
//定义函数
int sum2(int a, int b){
return a + b;
}
-(void)desc2{
//2.声明block
int(^p)(int, int);
//3.把函数赋值给block
//p = sum2;
p = ^(int a, int b){
return a + b;
};
//4.使用
int result = p(10,40);
printf("swift调用OC方法输出result:%d\n",result);
}
//桥接头文件SwiftTest-Bridging-Header.h
//导入OC类
#import "OCClass.h"