我正在创建一个通过蓝牙与外围设备通信的iOS应用。蓝牙设备的API用Objective-C编写,因此我选择编写AppDelegate,而ViewController也用Objective-C编写。我还开发了CoreML算法,并选择与Swift中的模型进行交互(XCode为我自动生成了一个名为Model
的Swift类)。从那里,我创建了另一个名为Predictor
的Swift类,该类具有名为predict
的方法,该方法返回Model.
中包含的ML算法的结果。但是,当我导入{{1 }}是我的Objective-C视图控制器的Swift类,XCode似乎无法访问其Predictor
方法。
我是Objective-C和Swift的新手,但我认为我对类结构有具体的了解。我已经尝试了很多事情,至此,我只是在猜测。我必须对Swift / Objective-C有一个基本的误解,但我无法识别它。
我在Swift中的Predictor类暴露给Objective-C,并且继承自NSObject,但是没有init()函数(我认为没有必要这样做)。
predict
ViewController.h
@objcMembers class Predictor: NSObject {
let model = Model();
@objc func predict(data: [Double]) -> Int64 {
isPreictal = model.prediction(input: data)
return isPreictal.classLabel
}
}
ViewController.m
@class Predictor;
@interface ViewController : UIViewController
< IXNMuseConnectionListener, IXNMuseDataListener, IXNMuseListener, IXNLogListener>
- (IBAction)compute:(id)sender;
- (Predictor *)returnSwiftObject;
- (void)applicationWillResignActive;
@end
看到我的Swift类#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
导入了ViewController.h,SeizureSense-Swift标头也导入了ViewController.m,我希望我可以在{{ 1}}类实例Predictor
,但返回以下错误消息:predict
答案 0 :(得分:1)
_myModel.predict(data: modelInputs)
无法正常工作。您正在尝试在Objective-C中使用Swift语法。
在Objective-C中,调用方法的语法不同。实际上,甚至方法名称也不同。您的通话应该类似于:
[self log:@"%d", [_myModel predictWithData:modelInputs]];