美文网首页
Swift和OC混编

Swift和OC混编

作者: 一个栗 | 来源:发表于2020-12-29 17:35 被阅读0次

iOS8以后苹果公司给出了这2种语言之间的桥接方案,简单来说,就是在Swift过程中,通过提示创建的Bridging头文件可以将OC文件和Swift文件衔接在一起。实际应用较多的主要是Swift中调用OC类,使得在最新的Swift工程中依然能够兼容使用以前的OC类库等。

先建立一个Swift工程,名为SWiftBridge,并分别创建了一个新的名为SwiftClass的Swift类文件和一个名为OCClass的OC类文件,创建第一个OC类的时候会提示创建Bridging头文件,即桥接文件,如图所示:


截屏2020-12-2916.40.02.png

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

  1. 在SwiftClass.swift中定义一个实例方法和一个类方法
    @objcMembers
    在 Swift 文件中,若要规定固定的方法或属性暴露给 Objective-C 使用,可以在方法或属性前加上 @objc来声明。如果类是继承NSObject,那么要在非 private 的方法或属性前加上@objc(据说swift3.0之前都是系统自动加上的!!!),现在要手动加。也可以在swift类的前面加上@objcMembers这个关键字,这样可以让该类的所有属性和方法加上@objc。【添加后可编译一下】
import UIKit

@objcMembers  class SwiftClass: NSObject {
    func SwiftInstanceMethod() -> Void {
        printf("Swift instance method")
    }
    class func SwiftClassMethod() -> Void {
        printf("Swift class method")
    } 
}
  1. 在OCClass类中调用SwiftClass
    在需要调用的OC类中引用头文件
#import "SWiftBridge-Swift.h"

具体代码如下:

// OCClass.h
#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface OCClass : NSObject

- (void)OCInstanceMethod;

+ (void)OCClassMethod;

@end

NS_ASSUME_NONNULL_END

// OCClass.m
#import "OCClass.h"
// 引入头文件
#import "SWiftBridge-Swift.h"

@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
  1. 在SWiftBridge-Bridging-Header.h中引入OC类头文件供swift类调用
#import "OCClass.h"
  1. 在ViewController.swift中调用OCClass类
import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let occ = OCClass()
        occ.ocInstanceMethod()
        OCClass.ocClassMethod()
    }
}

打印结果如下:

Swift Instance Method
2020-12-29 17:29:36.236222+0800 SWiftBridge[6400:19921310] OC Instance Method
Swift class method
2020-12-29 17:29:36.236402+0800 SWiftBridge[6400:19921310] OC Class Method

相关文章

  • 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(总)

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

  • Swift

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

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

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

  • OC Swift文件混编

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

  • Swift 和 OC 混编之 framework

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

  • Swift和OC混编出现的桥接问题

    1.如果是自己的项目要进行Swift和OC混编 请参考 oc 和 swift混编之自建桥接文件 作者:水墨九 进行...

  • OC和Swift混编

    OC和Swift的混编,分为两种情况: OC项目中嵌入Swift文件 Swift项目中嵌入OC文件 先来看OC项目...

网友评论

      本文标题:Swift和OC混编

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