一、OC和Swift混编环境搭建
1、配置define modules为yes
点击工程文件->TARGETS->BuildSettings->Packaging
将Defines Modules 设置为yes,
Product Module Name设置为你的工程名,
此时,系统自动生成 "工程名-Swift.h" 这个文件,
只是它不显示出来你看不见而已,先放着,这个文件千万别手动创建!!
2、创建"工程名-Bridging-Header.h"文件 建议用第二种方式
方法1:手动创建"工程名-Bridging-Header.h"
新建一个.h文件(File->New->File)
注意这里名字一定要命名为: 你的工程名-Bridging-Header
然后点击工程文件->TARGETS->Build Settings->Swift Compolier - General 下
配置Objective-C Bridging Header文件
注意!这里要写的路径,是指上面创建的.h文件
例如:$(SRCROOT)/的工程名/的工程名-Bridging-Header.h
方法2:在工程新建一个swift文件生成你的工程名-Bridging-Header
新建一个基于swift语言继承NSObject的类
这个时候会弹出一个弹层
选择Create Bridging Header
此时工程里面就会自动生成 工程名-Bridging-Header.h这个文件
这个时候Swift和OC混编的环境就基本配置完成了
二、混编使用
1、创建一个OC工程
2、创建swift文件 : MyViewController.swift (自带xib)
1、Swift文件中调用OC文件
在 "工程名-Bridging-Header.h"中添加你要在swift中使用的OC类的头文件
#import "YKDate.h"
在swift类中使用代码如下:
import UIKit
class MyViewController: UIViewController {
@IBOutlet weak var label : UILabel!
override func viewDidLoad() {
super.viewDidLoad()
let currentDate = YKDate.currentSystemDay()
self.label.text = currentDate
}
@IBAction func backAction(_ sender : AnyObject) {
self .dismiss(animated: true, completion: nil)
}
}
2、在OC类中使用swift类代码如下:
#import "ViewController.h"
#import "OC_Swift-Swift.h" // 导入配置环境时生成的类文件
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (IBAction)handleClickEvent:(id)sender {
// MyViewController 虽然是swift类,可以直接用OC的方式处理
MyViewController *myVC = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
[self presentViewController:myVC animated:YES completion:nil];
}
网友评论