将Swift类导入OBJ-C:在类型对象上找不到属性



我正在创建一个通过蓝牙与外围设备通信的iOS应用程序。蓝牙设备的API是用Objective-C编写的,因此我选择写我的AppDelegate和ViewController也写了Objective-C。我还开发了一种Coreml算法,我选择与Swift与该模型进行交互(Xcode Autogenation为我供名为Model的Swift类(。从那里,我创建了一个名为Predictor的第二个Swift类,该类带有一种称为predict的方法,该方法返回了Model.中包含的ML算法的结果,但是,当我将Predictor Swift类导入到我的Objective-C View Controller中时,Xcode无法似乎可以访问其predict方法。

我是Objective-C和Swift的新手,但我认为我对班级结构有具体的理解。我尝试了很多事情,以至于我只是在猜测。我必须对Swift/Objective-C有根本的误解,但我无法确定。

我在Swift中的预测类别类别接触了Objective-C,并从NSObject继承,但没有INIT((函数(我不相信一个函数?(。

@objcMembers class Predictor: NSObject {
    let model = Model();
    @objc func predict(data: [Double]) -> Int64 {
        isPreictal = model.prediction(input: data)
        return isPreictal.classLabel
    }
}

viewController.h

@class Predictor;
@interface ViewController : UIViewController
< IXNMuseConnectionListener, IXNMuseDataListener, IXNMuseListener, IXNLogListener>
- (IBAction)compute:(id)sender;
- (Predictor *)returnSwiftObject;
- (void)applicationWillResignActive;
@end

viewcontroller.m

#import "ViewController.h"
#import "SeizureSense-Swift.h"
@interface SimpleController () <CBCentralManagerDelegate>
@property (nonatomic, strong) Predictor * myModel;
double modelInputs[30];
- (void)viewDidLoad { _myModel = [Predictor new]; }
- (IBAction)compute:(id)sender {
    [self log:@"%d", _myModel.predict(data: modelInputs)];
}
@end

看到我的Swift类Predictor被导入到viewController.h,我的SeizuresSessens-Swift标头将导入到viewController.m,我希望我可以访问Predictor类中的predict方法myModel,但是以下错误消息是返回:Property 'predict' not found on object of type 'Predictor *'

_myModel.predict(data: modelInputs)无法正常工作。您正在尝试在Objective-C中使用Swift语法。

在Objective-C语法中用于调用方法是不同的。实际上,即使方法名称也不同。您的电话应该是:

[self log:@"%d", [_myModel predictWithData:modelInputs]];

最新更新