【发布时间】:2019-06-28 19:34:43
【问题描述】:
我正在创建一个通过蓝牙与外围设备通信的 iOS 应用。蓝牙设备的 API 是用 Objective-C 编写的,所以我选择编写我的 AppDelegate 和 ViewController 也是用 Objective-C 编写的。我还开发了一个 CoreML 算法,我选择与 Swift 中的模型进行交互(XCode 自动生成一个名为 Model 的 Swift 类)。从那里,我创建了第二个名为 Predictor 的 Swift 类,它有一个名为 predict 的方法,它返回包含在 Model. 中的 ML 算法的结果但是,当我将 Predictor Swift 类导入到我的 Objective- C 视图控制器,XCode 似乎无法访问其predict 方法。
我是 Objective-C 和 Swift 的新手,但我认为我对类结构有一个具体的理解。我已经尝试了这么多事情,在这一点上,我只是猜测。我一定对 Swift/Objective-C 有一个根本性的误解,但我无法识别它。
我在 Swift 中的 Predictor 类暴露于 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 内部的 predict 方法@ 类实例 @ 987654333@,但返回如下错误信息:Property 'predict' not found on object of type 'Predictor *'
【问题讨论】:
标签: ios objective-c swift