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

Xcode9 Swift4项目中如何在Objective-C文件调用Swift函数?

让Objective-C调用Swift代码的具体操作步骤(Xcode 9 + Swift 4)

我来帮你搞定这个问题!在Swift项目里让Objective-C调用Swift代码,核心是利用Xcode自动生成的模块名-Swift.h桥接文件,下面是一步步的操作:

1. 确认Xcode自动桥接文件的配置

  • 打开项目的「Build Settings」,在搜索框输入Objective-C Generated Interface Header Name,默认值是$(PRODUCT_MODULE_NAME)-Swift.h(比如你的项目叫MySwiftApp,这个文件就是MySwiftApp-Swift.h),记住这个文件名,后面要用到。
  • 再搜索Defines Module,确保它的值是YES(一般默认就是YES,但最好检查一下,这是生成桥接文件的前提)。

2. 让Swift代码对Objective-C可见

只有被@objc修饰的Swift类和方法,才能被Objective-C识别,具体分两种情况:

  • 如果你的Swift类继承自NSObject,默认会自动被@objc修饰,直接写方法就行:
    class MySwiftHelper: NSObject {
        // 这个方法默认对OC可见
        func showMessage() {
            print("Hello from Swift!")
        }
    }
    
  • 如果是非NSObject的子类,或者想让整个类的所有成员都对OC开放,需要手动添加修饰符:
    // 单个类加@objc,方法也要加@objc
    @objc class CustomSwiftTool {
        @objc func doTask() {
            print("Doing task from Swift!")
        }
    }
    
    // 用@objcMembers让类里所有属性、方法都对OC可见
    @objcMembers class FullAccessSwiftClass: NSObject {
        var userName: String = "Guest"
        func greetUser() {
            print("Hi \(userName)!")
        }
    }
    

    注意:Swift的结构体、普通枚举(除非是继承NS_ENUM的@objc枚举)、泛型这些类型,Objective-C是无法调用的,尽量用继承自NSObject的类。

3. 在Objective-C文件中导入自动生成的桥接文件

一定要在Objective-C的.m文件里导入,不要在.h文件里导入(避免循环引用问题):

// 替换成你的项目模块名对应的桥接文件名
#import "MySwiftApp-Swift.h"

如果不确定模块名,去Build Settings里搜索Product Module Name,那里的值就是你要填的前缀。

4. 在Objective-C中调用Swift代码

现在就可以正常创建Swift类的实例,调用方法了:

// 创建MySwiftHelper实例并调用方法
MySwiftHelper *swiftHelper = [[MySwiftHelper alloc] init];
[swiftHelper showMessage];

// 使用FullAccessSwiftClass的属性和方法
FullAccessSwiftClass *fullAccessObj = [[FullAccessSwiftClass alloc] init];
fullAccessObj.userName = "John";
[fullAccessObj greetUser];

常见问题排查

  • 如果OC里找不到Swift类,先执行「Product -> Clean Build Folder」清理项目,再重新Build——因为自动桥接文件是Build之后才会生成的。
  • 检查Swift类/方法的访问级别:必须是internal(默认)或public,private修饰的成员OC是访问不到的。
  • 确认桥接文件名拼写正确,尤其是模块名部分,别和项目名搞混(有时候项目名有特殊字符,Xcode会自动调整模块名)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:50:51