Flutter7日目。
iOS連携
iOS側の機能を呼び出す際には Dart と Objective-C もしくは Swift と連携をする必要がある。
Flutterではチャンネルのキーワードを決めることで必要な連絡を取れるようになっている。
今回はその中でも Dart から連絡を入れる場合。
とはいえ結局は6日目にあげたリンク
Writing custom platform-specific code with platform channels
の実際どうするの?話に尽きる。
チャンネルとは?
要は文字列。
Dart では
const MethodChannel('samples.flutter.io/battery');
と書いてあるもの。
Objective-C では
methodChannelWithName:@"samples.flutter.io/battery"
文字列が同じ。
関数の呼び出し方
つまりは Dart 側。
MethodChannel methodChannel;
final int result = await methodChannel.invokeMethod('getBatteryLevel', ['Hello', 'World']);
これで引数が渡せる。
引数の取り方
Objective-C の場合
引数無しは上記リンクで。
引数有りの場合
NSArray* arguments = call.arguments;
NSString* word = arguments[0];
ってやると引数に渡した文字列が取れる。
int を渡したなら int で受け取りましょう。
Swift の場合
let arguments = call.arguments as! Array<Any>;
let word = arguments[0] as! String;
で受け取りましょう。
Swiftでargumentsの定義にとんでも id がどうこうと見えるだけで結局どうしたらよいかわからんかった。
おまけ
id とは?
Objective-C にある型で、C でいう void* のようなものっぽい。
Swiftではこれが Any となるっぽい。as! や as? に関しては Swift のキャストについて調べてみてね。
この内容は
個人ブログ でも投稿されております。
お仕事募集しております
株式会社xhift
北千住でコワーキングスペースも運営しておりました。再開したい!
Bono Prince(ぼのプリ)