iOS库(五)OC与Swift混编

前言

Framework的开发中,难免会遇到OC与Swift混编的情况;

一、OC调用Swift

1. 定义要被调用的Swift类与方法;

  • 该类必须是集成于OC的类
  • 该类必须使用public修饰
  • 被调用的方法,必须使用@objc修饰
  • 被调用的方法,必须使用public修饰
import Foundation
public class SwiftObject: NSObject {
    @objc public func callOC() {
        print("======")
    }
}

2.OC调用Swift类

#import "FirstObject.h"
// 引入头
#import <First/First-Swift.h>

@implementation FirstObject

- (void)callSwift
{
    // 直接调用Swift类
    SwiftObject *test = [[SwiftObject alloc] init];
    [test callOC];
}
@end

二、Swift调用OC

在工程中,Swift如果想调用OC,需要建立一个桥接文件;同理,在Framework中也一样,需要创建一个桥接文件

  • 创建一个module.modulemap文件
  • module.modulemap文件中,引入需要调用的类
module JiuWuVisitorSwift {
    header "OCObject.h"
    export *
}

这里header中,引入的是OCObject.h相对于module.modulemap的路径

  • 配置module.modulemap的路径
    TARGETS->Build Settings->Swift Compiler - Search Paths-> Import Paths下添加module.modulemap所在的文件夹的路径
    "${SRCROOT}/First"

  • 在Swift中调用OC类

import Foundation
// 引入转接文件
import FirstSwift

public class SwiftObject: NSObject {
    @objc public func callOC() {
        // 调用oc类
        let test = OCObject()
        test.test()
    }
}

如果Framework中包含Swift,并且把Framework编译成静态库,可能会报一下错误;


解决办法:在主工程中创建一个空的Swift文件;

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容