美文网首页
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 混编

    oc Swift 混编 oc 项目 混编Swift1.1 oc 调用 Swift 的类 和 方法步骤: ...

  • OC和Swift混编一

    OC工程下混编 Swift工程下混编请查看OC和Swift混编二 1.建一个OC工程命名为OCTestSwift ...

  • OC和Swift混编二

    Swift工程下混编 OC工程下混编请查看OC和Swift混编一 1.建一个Swift工程命名为SwiftTest...

  • Swift

    混编 15、OC与Swift的混编_海森堡_lichangan的博客-CSDN博客_oc swift 混编[htt...

  • Swift(总)

    Swift目录如下: Objective-C和Swift混编指南-s混编-OC&Swift[https://www...

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

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

  • OC和Swift混编手动创建桥接文件及命名空间

    Obj-C混编Swift && Swift混编Obj-C Swift引用OC实现通过桥接头文件,OC引用Swift...

  • swift 中使用Objective-C框架方法

    桥接头文件主要应用于swift和oc的混编。 第一种情况 .swift项目,这边以SDWebImage为例子,拖入...

  • OC Swift文件混编

    一.Swift 类可以继承 OC 类,OC 类不能继承 Swift 类。 二.Swift 和 OC 混编 三.两个...

  • Swift 和 OC 混编之 framework

    Swift 和 OC 混编之 framework 在主工程为 Swift 的 framework 中引用 OC 代...

网友评论

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

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