美文网首页
OC和Swift语言互调

OC和Swift语言互调

作者: 爱笑的猫mi | 来源:发表于2019-02-08 09:57 被阅读0次

OC和Swift之间的互调很简单,iOS8以后官方给出了这两种语言之间的桥接方案,简单说就是在Swift工程中,通过提示创建的Bridging头文件可以将OC文件和Swift文件衔接在一起,从而可以在OC文件中引用Swift类,或者在Swift文件中引用OC的类。应用较多的主要是在Swift中调用OC类,使得在最新的swift工程中仍然能够兼容使用以前的OC类库等。

这里通过一个简单的例子展示在Swift工程中OC和Swift之间的互调:

首先建立一个Swift工程,这里创建了一个Single View Application,工程名为SwiftBridge,并分别新建了一个新的名为SwiftClass的swift类文件和一个名为OCClass的OC类文件,创建第一个OC文件后会提示创建一个Bridging头文件,创建后就可以对两者进行桥接:


20.png

这里我们在ViewController.swift中调用OCClass类,同时在OCClass类中调用SwiftClass.swift。其中在swift中引用OC类时要在Bridging头文件中引入OC类的头文件(swift文件中没有头文件及其引用),而在OC中引用swift类时直接引入“SwiftBridge-swift.h”即可,不需要在Bridging头文件设置,其中“SwiftBridge”为工程名,该文件是隐藏的,对工程中所有swift类文件进行了向OC语言的翻译,从而在OC文件中可以像调用其他OC文件一样调用工程中的swift类文件。

1.在SwiftClass.swift中定义一个实例方法和一个类方法:

import UIKit

class SwiftClass: NSObject {
    func SwiftInstanceMethod() -> Void {
        print("swift instance method!");
    }
    class func SwiftClassMethod() -> Void {
        print("swift class method!");
    }
}

2.在OCClass类中调用SwiftClass:

/* OCClass.h */
#import <Foundation/Foundation.h> 
@interface OCClass : NSObject
- (void)OCInstanceMethod;
+ (void)OCClassMethod;
@end

/* OCClass.m */
#import "OCClass.h" #import "SwiftBridge-swift.h" /* 引入swift类头文件 */ 
@implementation OCClass
- (void)OCInstanceMethod {
    /* 调用swift实例方法 */
    SwiftClass *swiftc = [[SwiftClass alloc] init];
    [swiftc SwiftInstanceMethod];
    NSLog(@"oc instance method!");
}
+ (void)OCClassMethod {
    /* 调用swift类方法 */
    [SwiftClass SwiftClassMethod];
    NSLog(@"oc class method!");
}
@end

3.在Bridging头文件引入OC类头文件供swift调用:

/* SwiftBridge-swift.h */
#import "OCClass.h"

4.在ViewController.swift中调用OCClass类:

/* ViewController.swift */
import UIKit
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let occ = OCClass()
        occ.ocInstanceMethod()
        OCClass.ocClassMethod()
    }
}

打印结果

swift instance method!
2017-04-12 12:40:39.657 SwiftBridge[3773:5420107] oc instance method!
swift class method!
2017-04-12 12:40:39.657 SwiftBridge[3773:5420107] oc class method!

相关文章

  • 在.framework 中,OC 和 Swift 互调

    OC 和 Swift 互调(.framework 中和普通项目中) Framework 实现 OC 与 Swift...

  • OC和Swift语言互调

    OC和Swift之间的互调很简单,iOS8以后官方给出了这两种语言之间的桥接方案,简单说就是在Swift工程中,通...

  • ios 基础知识整理(一)

    一、Swift 和OC 如何相互调用? 1.Swift 调用 OC代码 需要创建一个 Target-BriBrid...

  • Swift 闭包(二)

    OC Block 和 Swift 闭包相互调用 我们在 OC 中定义的 Block,在 Swift 中是如何调用的...

  • OC与Swift混编

    OC与Swift混编 一.objectivec与Swift相互调用对照 OC interface文件如下 转换后对...

  • Swift和OC互调

    一、OC调用swift文件 在OC项目中创建一个swift文件的时候,Xcode 会提示 需要创建一个桥接文件,如...

  • OC 和 swift 互调

    swift中调用OC 如果想要在swift中调用OC,那么需要一个桥接文件(OC Bridging Header)...

  • Swift和OC互调

    整理之前学习swift的笔记,虽然现在看起来很简单,但还是想分享出来。 (一)Swift调用OC 假设:我们的项目...

  • OC和Swift混合开发(含Pod私有库的相互引用)

    环境 Xcode 12.4, Swift:5.0 概述:该文档主要介绍OC和Swift混合开发相互调用,包括3大...

  • Swift类与OC类相互调用

    这里将使用Xcode 8.0演示Swift与OC类的相互调用 - Swift项目中调用OC类 1.首先在Swift...

网友评论

      本文标题:OC和Swift语言互调

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