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