読者です 読者をやめる 読者になる 読者になる

日本語教師、プログラマーになる。

韓国に嫁いで日本語を教えていましたが、なんやかんやでiOSアプリ作ってます。

SwiftからMWPhotoBrowserを使おうとしたらイケメンなお兄さんに怒られる

Objective-Cでできているプロジェクトを、Swiftに書き直してるんだけど

ライブラリがObjective-Cで出来てて、

そのまま使わないといけない場面が結構あります

(まだObjective-Cのまんまなクラスが結構あるので、一気に変えられない)

これが結構たいへん。

 

もちろん(プロジェクト名)-Bridging-header.hはちゃんと書いてますよ?

 

検索してみても、

ライブラリそのものをSwift製のやつに乗り換えちゃいましたテヘペロ

みたいなんが結構あってゲンナリです。

 

有名な写真閲覧ライブラリのMWPhotoBrowserもその一つ。

github.com

(詳細リンクを貼ってみたら、イケメンなお兄さんの写真が出て来てびっくりしました。このお兄さんが作ってくれたのかな?ありがとう愛してるよ!)

 

んでこれをObjective-Cのまま、Swiftから呼び出して使いたいんだけど

適当にSwiftに直してみただけだと

 

Type ‘なんとかビューコントローラー’ does not conform to protocol MWPhotoBrowserDelegate

 

とかいうのが出ます

つまり「必須メソッド足りとらんやんけ!!」と怒られてしまうわけです。

 

えぇ~必須のヤツ2つとも書いたやん???って思って結構迷ったんですけど

 

結局Swiftに書き直す段階で微妙に違うメソッドになってしまっていたために、

必須メソッドどこにも見当たらないじゃない!嘘つき!とか言われてたみたいです。

そこらへんは空気読んでくれよ!

 

で色々探してたどり着いたのがこちらの方法。

stackoverflow.com

 

ポイントは二つ!

-MWPhotoじゃなくてMWPhotoProtocolを返す

-IntじゃなくてUIntにする

 

お節介にもこの辺をMWPhotoIntって書き直しちゃうと認識できなくなっちゃうようです。

 

後ブラウザを実際使用するときに、setCurrentPhotoIndexっていうのがあるけど

そこでもIntじゃなくてUIntを要求される。すなわち

 

browser.setCurrentPhotoIndex(UInt(indexPath.row))

 

とかそんな感じです。

 

この記事を書くまでは結構ムカついていたけど

イケメンのお兄さんが出て来たので若干怒りが収まりました。

ありがとうイケメンのお兄さん!