Swift与OC混编-Swift中调用OC方法
2017-07-06 本文已影响287人
神SKY
前言
在开发过程中有时候会遇到Swift和OC混编的情况,这篇文章就来简单的实现Swift调用OC的方法。
实现
1.新建一个语言为Swift的工程文件

2.在工程文件中新建一个OC文件

这个时候回出现一个提示框,点击"Create Bridging Header"。(注:这个关系到引用OC文件)

点完之后会创建一个header.h的文件,这个文件是用来导入OC的文件的

3.在header.h文件中导入OC的头文件

4.引用OC方法
OC的.h文件,这里有无参数的方法,有参数的方法,回调的方法,有参数回调的方法和多参数回调的方法,如下:
#import <Foundation/Foundation.h>
@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()
}
}
程序跑起来之后就可以看到如下打印:

希望这篇文章对各位看官有所帮助,Demo下载地址:Demo