swift oc 混编

swift 混编 oc

转自
1.创建swift项目
2.新建oc类

方式一:在一个全新的Swift,利用第一次新建提示的方式自动添加桥接头文件。
这个是在swift项目中,创建其他语言类的时候(OC,C等),系统会提示你添加一个桥接头文件,如图

swift oc 混编_第1张图片
image.png

生成格式为"你的工程名字-Bridging-Header.h"的文件

有的可能是xcode配置问题,没有提示,那也可以自己创建一个,格式得按照以上的格式,但还有一种方式,不仅能创建还可以改变这个格式,取一个自己喜欢的文件名,但需要修改一些配置.

方式二:新建一个头文件,名为:JeckHeader.h
在targets->build settings ->Object-C Bridging Header 位置设为Swift/JeckHeader.h,如下图所示,这个头文件也就是桥接头文件,代码一会儿再说.

swift oc 混编_第2张图片
image.png
swift oc 混编_第3张图片
image.png
swift oc 混编_第4张图片
image.png

** 格式为"工程名-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"  

你可能感兴趣的:(swift oc 混编)