前言
看到这个标题,大家伙可能会认为我太out了,Swift都出来4年了,类似的文章数不胜数,还有什么可写的。对此我只想说:是的,的确是这样。但是本篇介绍的还是有其独特的亮点,这些亮点可以让你对桥接文件产生更充分的认识
这里先介绍普通工程下,Swift与OC混编时桥接文件的建立方法
Swift调用OC实现
1.新建一个语言为Swift的工程文件
2.在工程文件中新建一个OC文件
这个时候回出现一个提示框,点击"Create Bridging Header"。(注:这个关系到引用OC文件)
点完之后会创建一个header.h的文件,这个文件是用来导入OC的文件的
3.在header.h文件中导入OC的头文件
4.引用OC方法
OC的.h文件,这里有无参数的方法,有参数的方法,回调的方法,有参数回调的方法和多参数回调的方法,如下:
#import
@interface OCFile : NSObject
- (void)sayHello;
- (void)saySomething:(NSString *)str;
- (void)sayCallback:(void(^)(NSString *))callback;
- (void)saySomething:(NSString *)str callback:(void(^)(NSString *))callback;
- (void)saySomething1:(NSString *)str1 Something2:(NSString *)str2 callback:(void(^)(NSString *))callback;
@end
OC的m文件如下:
#import "OCFile.h"
@implementation OCFile
- (void)sayHello
{
NSLog(@"Hello World");
}
- (void)saySomething:(NSString *)str
{
NSLog(@"%@",str);
}
- (void)sayCallback:(void (^)(NSString *))callback
{
if (callback) {
callback(@"Hello World 3");
}
}
- (void)saySomething:(NSString *)str callback:(void (^)(NSString *))callback
{
if (callback) {
callback(str);
}
}
- (void)saySomething1:(NSString *)str1 Something2:(NSString *)str2 callback:(void (^)(NSString *))callback
{
if (callback) {
callback([NSString stringWithFormat:@"%@ %@",str1,str2]);
}
}
@end
在Swift中的引用方式如下:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let oc = OCFile();
oc.sayHello();
oc.saySomething("Hello World 2");
oc.sayCallback { (str) in
print(str!);
}
oc.saySomething("Hello World 4") { (str) in
print(str!);
}
oc.saySomething1("Hello World", something2: "5") { (str) in
print(str!);
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
OC调用Swift实现
oc文件引用swift文件,只需导入“#import "文件名-Swift.h"”文件,如图,我的文件名为SwiftWithOC,那么导入文件名为#import "SwiftWithOC-Swift.h"
#import "OCNewObject.h"
#import "SwiftWithOC-Swift.h"
@implementation OCNewObject
- (void)nslogHello
{
SwiftOCTest *swift = [[SwiftOCTest alloc] init];
[swift getGongZhongHaoName];
NSLog(@"Hello World");
}