You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift Package中如何调用未迁移的Objective-C类

解决方案:Swift Package中Swift调用Objective-C代码

要让Swift代码能访问Objective-C类,不需要桥接文件,只需通过配置模块暴露和依赖关联来实现,具体步骤如下:

1. 修改Package.swift配置

需要调整两个target的配置:给Objective-C target指定公开头文件路径,让Swift target依赖这个Objective-C target。

修改后的Package.swift代码:

import PackageDescription

let package = Package(
    name: "MyPackage",
    products: [
        .library(
            name: "MyPackage",
            targets: ["MyPackageSwift","MyPackageObj"]),
    ],
    dependencies: [
    ],
    targets: [
        .target(
            name: "MyPackageSwift",
            dependencies: ["MyPackageObj"] // 让Swift目标依赖Objective-C目标
        ),
        .target(
            name: "MyPackageObj",
            publicHeadersPath: "Include" // 指定公开头文件所在的目录
        ),
    ]
)

2. 在Swift代码中导入Objective-C模块

Swift Package会自动将Objective-C代码打包成一个模块,模块名就是你的Objective-C target名称MyPackageObj,只需在Swift代码中导入该模块即可访问其中的类。

修改后的MyPackage.swift代码:

import MyPackageObj // 导入Objective-C模块

public struct MyPackage {

    public init() {
    }
    
    public func myService() -> String {
        
        let objcService = MyObjCClass()
        let objcContent = objcService.myObjCService()
        
        return "This is myService in MyPackage, Objective-C service returns: \(objcContent)"
    }
}

原理说明

  • 在Swift Package中,Objective-C代码会被封装成独立模块,无需桥接文件,通过模块导入即可访问
  • publicHeadersPath 指定了Objective-C模块对外暴露的头文件目录,只有该目录下的头文件会被导出供Swift调用
  • Swift target必须声明依赖Objective-C target,才能在编译时找到对应的模块并完成类型解析

内容的提问来源于stack exchange,提问作者Fab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:15:44