美文网首页
Objective-C中混编swift

Objective-C中混编swift

作者: RobinZhao | 来源:发表于2018-02-09 20:50 被阅读0次

    一、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];
    }
    
    

    混编过程中遇到的问题

    相关文章

      网友评论

          本文标题:Objective-C中混编swift

          本文链接:https://www.haomeiwen.com/subject/niyqtftx.html