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を含むプロジェクト、含まないプロジェクト両方で使いたいのに。

ここから先は

158字 / 1画像
文章やサンプルコードは多少荒削りかもしれませんが、ブログや書籍にはまだ書いていないことを日々大量に載せています。たったの400円で、すぐに購読解除してもその月は過去記事もさかのぼって読めるので、少しでも気になる内容がある方にはオトクかと思います。

技術的なメモやサンプルコード、思いついたアイデア、考えたこと、お金の話等々、頭をよぎった諸々を気軽に垂れ流しています。

最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/