Я создаю приложение для iOS, которое связывается с периферийным устройством через Bluetooth. API устройства Bluetooth написан на Objective-C, поэтому я решил написать, что мой AppDelegate и ViewController также написаны на Objective-C. Я также разработал алгоритм CoreML, который я выбрал для взаимодействия с этой моделью из Swift (для меня XCode автоматически генерирует класс Swift с именем Model
). Оттуда я создал второй класс Swift с именем Predictor
, в котором есть метод с именем predict
, который возвращает результат алгоритма ML, содержащегося в Model.
Однако, когда я импортировал класс Predictor
Swift в свой Objective- C контроллером представления, XCode, кажется, не мог получить доступ к его predict
методу.
Я новичок в Objective-C и Swift, но я думаю, что у меня есть конкретное понимание структур классов. Я перепробовал так много вещей, что на данный момент, я просто догадываюсь. У меня должно быть фундаментальное неправильное понимание Swift / Objective-C, но я не могу его идентифицировать.
Мой класс Predictor в 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, а мой заголовок SeizureSense-Swift импортируется в ViewController.m, я ожидаю, что смогу получить доступ к методу predict
внутри Predictor
экземпляра класса myModel
, но возвращается следующее сообщение об ошибке: Property 'predict' not found on object of type 'Predictor *'