Core MLモデルから自動生成されるクラスの言語を指定する
Objective-Cコードを含むプロジェクトに.mlmodelを追加すると、自動生成されるクラス群がObjective-Cで生成されるということがあった。その場合、mlmodelファイルをXcodeでプレビューしたときに薄いテキストで
Automatically generated Objective-C model class
と表記されている。またソースコードへ遷移したときに、ObjCで書かれていることが確認できる。
で、これで何が困るかと言うと、イニシャライザやmodelプロパティがnullableとして生成される点だ。
@property (readonly, nonatomic, nullable) MLModel * model;
- (nullable instancetype)init;
このとき呼び出し側をSwiftで書くと、こうなる:
let model = HogeModel()!.model!
しかし同じモデルを完全にSwiftのみのプロジェクトに追加する場合、生成されるコードにおいてイニシャライザやmodelプロパティの戻り値はoptionalではない。
var model: MLModel
convenience init() {
try! self.init(contentsOf: type(of:self).urlOfModelInThisBundle)
}
なので呼び出し側はこうなる。
let model = HogeModel().model
困った。モデル&呼び出し側のラッパーSwfitコードを、ObjCを含むプロジェクト、含まないプロジェクト両方で使いたいのに。
最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/