我正在创建一个通过蓝牙与外围设备通信的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]];