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

在Objective-C中调用Swift方法报错:找不到User类的isReady选择器

解决Objective-C调用Swift方法时的No visible @interface for "User" declares the selector "isReady"错误

问题根源

你的Swift方法isReady(isTrue: Bool) -> Bool是带参数的,但Objective-C调用时既没传参数,也没使用正确的Objective-C方法签名。加上Swift参数标签到Objective-C的转换规则,这就是报错的核心原因,咱们一步步修正:

步骤1:理解Swift到Objective-C的方法签名转换

用@objcMembers标记Swift类后,这个带参数的方法会被自动暴露给Objective-C,但默认的签名会变成:

- (BOOL)isReadyWithIsTrue:(BOOL)isTrue;

(Swift的第一个外部参数标签会被拼接到方法名后,用With连接,这是苹果默认的转换逻辑)

步骤2:修正Objective-C调用代码

你需要传入对应的布尔参数,同时使用正确的selector调用:

User *user = [[User alloc] init];
BOOL result = [user isReadyWithIsTrue:YES]; // 按需传入YES/NO

可选:自定义更简洁的Objective-C方法名

如果你觉得默认生成的方法名太长,可以在Swift方法上用@objc指定自定义的Objective-C selector:

@objcMembers class User: NSObject {
    // 指定Objective-C里的方法名为isReady:
    @objc(isReady:)
    func isReady(isTrue: Bool) -> Bool {
        return true
    }
}

这样Objective-C里就能用更简洁的方式调用:

BOOL result = [user isReady:YES];

额外排查(如果上述方法无效)

  • 确认项目已正确配置桥接文件(通常命名为YourProjectName-Bridging-Header.h),确保Swift类User能被Objective-C识别。
  • 尝试Clean项目(Cmd + Shift + K)后重新Build,有时候缓存会导致方法签名不更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:41:54