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

Swift类导入Objective-C后提示‘predict属性未找到’问题求助

解决Objective-C调用Swift Predictor类方法的问题

首先咱们拆解下你遇到的几个核心问题,都是Swift和Objective-C交互里的常见新手坑,一步步来解决:

1. 先修正Swift代码里的语法错误

你的predict方法里isPreictal变量没提前声明,这会导致Swift代码编译失败,更没法给Objective-C调用。先补上这个变量:

@objcMembers class Predictor: NSObject {
    let model = Model();
    
    @objc func predict(data: [Double]) -> Int64 {
        // 补上变量声明,匹配Model的prediction返回类型
        let isPreictal = model.prediction(input: data)
        return isPreictal.classLabel
    }
}

2. 修正Objective-C的方法调用语法

你在compute:里用了Swift风格的调用写法_myModel.predict(data: modelInputs),但Objective-C有自己的方法调用规则:

  • Swift的predict(data:)方法暴露到Objective-C后,会被自动命名为predictWithData:
  • Objective-C调用方法必须用中括号+选择器的语法,不能用Swift的点语法
  • 另外你定义的modelInputs是C风格数组,和Swift方法要求的[Double](Swift数组)类型不匹配,需要先转成NSArray

修正后的compute:方法如下:

- (IBAction)compute:(id)sender {
    // 把C风格double数组转换成NSArray<NSNumber *>
    NSMutableArray *inputArray = [NSMutableArray arrayWithCapacity:30];
    for (int i = 0; i < 30; i++) {
        [inputArray addObject:@(modelInputs[i])];
    }
    // 用Objective-C的方法调用语法
    Int64 result = [_myModel predictWithData:inputArray];
    // Int64对应Objective-C的%lld格式符,不要用%d
    [self log:@"%lld", result];
}

3. 确认Swift类的暴露配置

你已经给Predictor加了@objcMembers并继承NSObject,这部分是对的,但可以再检查两个点:

  • 项目Build Settings里的Objective-C Generated Interface Header Name确实是SeizureSense-Swift.h(和你导入的一致)
  • 打开SeizureSense-Swift.h文件,确认里面已经生成了Predictor类和predictWithData:方法的声明(如果没生成,清理缓存重新编译试试)

可选优化:让参数传递更直接

如果不想每次都手动转数组,可以修改Swift方法的参数类型为NSArray,这样Objective-C调用更省心:

@objc func predict(data: NSArray) -> Int64 {
    // 把NSArray转成Swift需要的[Double]
    let swiftData = data.compactMap { ($0 as? NSNumber)?.doubleValue }
    let isPreictal = model.prediction(input: swiftData)
    return isPreictal.classLabel
}

最后记得先清理Xcode缓存(Cmd+Shift+K),再重新编译项目,应该就能解决Property 'predict' not found的错误了——本质是Objective-C和Swift的方法调用语法差异,加上参数类型不匹配导致的。

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

相关产品推荐
方舟 Agent Plan

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

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