美文网首页
OC和Swift混编的一个简单例子

OC和Swift混编的一个简单例子

作者: 路CLu | 来源:发表于2017-11-08 19:30 被阅读128次

    Swift和Objective-C的兼容相互兼容性使得在一个工程里可以方便地使用两种语言,就这个使用场景,本文将介绍

    • 如何将 Swift 导入到 Objective-C
    • 如何将 Objective-C 导入到Swift
    • 一个简单的例子
    导入到Swift 导入到Objective-C
    Swift 不需要import 语句 #import "ProductModuleName-Swift.h"
    Objective-C 不需要import 语句,需要Objective-C bridging 头文件 #import "header.h"

    一个简单的例子

    我们模拟一个项目,以前的控制器和工具类代码都是用OC编写,现在我们要用Swift编写新的代码,一般的,以前OC代码会调用新编写的Swift代码,Swift代码也需要调用OC的工具类。

    1. 设置Target>setting

    将框架 target 的 Build Settings > Packaging > Defines Module 设置为 Yes


    setting.png

    2.新建Swift文件

    在OC项目中第一次新建Swift文件时,系统会自动提示创建 Bridging 头文件,如文章开头表格所示,该文件用于将OC导入到Swift。


    creatASwiftFile.png

    3.将OC导入到Swift

    我们用Swift写了一个View,这个view被点击时会掉用OC的工具类OCTools的方法
    1、在SwiftAndOC-Bridging-Header.h文件里#import "OCTools.h"
    2、在Swfit文件里调用OCTools的方法

    import UIKit
    
    class SwiftView: UIView {
        override init(frame: CGRect) {
            super.init(frame: frame)
            initSubViews()
        }
        
        required init?(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
        
        private func initSubViews(){
            self.backgroundColor = UIColor.lightGrayColor()
            
            let dotView = UIView(frame: self.bounds)
            dotView.center = self.center
            dotView.layer.masksToBounds = true
            dotView.layer.cornerRadius = self.bounds.size.height/2
            dotView.layer.borderWidth = 1
            dotView.layer.borderColor = UIColor.blackColor().CGColor
            
            self.addSubview(dotView)
            
            let tap = UITapGestureRecognizer(target: self, action: #selector(tapDotAction))
            dotView.addGestureRecognizer(tap)
        }
        
        @objc private func tapDotAction(){
            OCTools.logWithText("Don't touch me!")
        }
    }
    

    3.将Swift导入到OC

    我们用Swift编写的view需要在OC写的控制器里被调用
    1、在控制器里#import "SwiftAndOC-swift.h",注意这里的头文件时系统自动生成,格式是 "Your Product Name"-swift.h
    2、调用Swift的类

    #import "ViewController.h"
    #import "SwiftAndOC-swift.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        SwiftView *sView = [[SwiftView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    
        sView.center = self.view.center;
        
        [self.view addSubview:sView];
        
        
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    @end
    

    For more information please visitUsing Swift with Cocoa and Objective-C:Swift and Objective-C in the Same Project

    相关文章

      网友评论

          本文标题:OC和Swift混编的一个简单例子

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