美文网首页
iOS库(五)OC与Swift混编

iOS库(五)OC与Swift混编

作者: fanren | 来源:发表于2023-04-11 09:16 被阅读0次

前言

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文件;

相关文章

网友评论

      本文标题:iOS库(五)OC与Swift混编

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