Objective-C
iOS
Dart
Flutter

FlutterでのiOS API呼び出し

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(ぼのプリ)