swift 混編 oc
轉(zhuǎn)自
1.創(chuàng)建swift項(xiàng)目
2.新建oc類
方式一:在一個(gè)全新的Swift衷笋,利用第一次新建提示的方式自動(dòng)添加橋接頭文件客峭。
這個(gè)是在swift項(xiàng)目中,創(chuàng)建其他語言類的時(shí)候(OC,C等),系統(tǒng)會(huì)提示你添加一個(gè)橋接頭文件,如圖
image.png
生成格式為"你的工程名字-Bridging-Header.h"的文件
有的可能是xcode配置問題,沒有提示,那也可以自己創(chuàng)建一個(gè),格式得按照以上的格式,但還有一種方式,不僅能創(chuàng)建還可以改變這個(gè)格式,取一個(gè)自己喜歡的文件名,但需要修改一些配置.
方式二:新建一個(gè)頭文件,名為:JeckHeader.h
在targets->build settings ->Object-C Bridging Header 位置設(shè)為Swift/JeckHeader.h,如下圖所示,這個(gè)頭文件也就是橋接頭文件,代碼一會(huì)兒再說.
image.png
image.png
image.png
** 格式為"工程名-swift.h",它就是項(xiàng)目中所有的swift類的頭文件. **
// SwiftClass.swift 類中的代碼,這里邊只是添加了一個(gè)函數(shù),OC的類會(huì)調(diào)用這個(gè)方法
import UIKit
class SwiftClass: NSObject {
func sayHello(name:String) -> String {
let greeting = "Hello" + name + "!"
return greeting
}
}
// OCClass.m OC的.m文件,這里實(shí)現(xiàn)了兩個(gè)方法并定義了一個(gè)C語言的函數(shù),為了方便對(duì)比,方法里實(shí)現(xiàn)了block,在這個(gè)類中演示:OC調(diào)用swift類中的方法
#import "OCClass.h"
#import "SwiftTest-swift.h"http://細(xì)心的朋友一定注意到了,項(xiàng)目文件中并沒有這個(gè)頭文件,但實(shí)際上項(xiàng)目中是有的,你也可以用command+鼠標(biāo)左鍵跳進(jìn)去查看,是隱藏的,如果你是按照我前邊的講的創(chuàng)建的swift文件,那你在這里是可以導(dǎo)入這個(gè)頭文件的,格式為"工程名-swift.h",它就是項(xiàng)目中所有的swift類的頭文件.
@implementation OCClass
-(void)desc22{
//聲明block
int (^p)(int, int);
//把函數(shù)賦值給block
p = ^(int a, int b){
return a + b;
};
//使用
int result = p(10,40);
NSLog(@"swift調(diào)用OC方法輸出result:%d\n",result);
//OC中調(diào)用swift函數(shù)
SwiftClass *sc = [[SwiftClass alloc] init];//創(chuàng)建swift對(duì)象
NSString *str =[sc sayHelloWithName:@"jeck"];//用swift的對(duì)象調(diào)用自己的函數(shù)(方法)
NSLog(@"OC中調(diào)用swift函數(shù)輸出 %@",str);
}
//定義函數(shù)
int sum2(int a, int b){
return a + b;
}
-(void)desc2{
//2.聲明block
int(^p)(int, int);
//3.把函數(shù)賦值給block
//p = sum2;
p = ^(int a, int b){
return a + b;
};
//4.使用
int result = p(10,40);
printf("swift調(diào)用OC方法輸出result:%d\n",result);
}
//橋接頭文件SwiftTest-Bridging-Header.h
//導(dǎo)入OC類
#import "OCClass.h"