iOS には JavaScriptCore というフレームワークがあります。これを使うと JavaScript コードと Swift コードを相互に連絡しながらプログラムを実行できます。Swift で作った自作クラスをそのまま JavaScript で使用できたり、JavaScript コードを動的生成して実行できたり、可能性は無限大。このトークではそんな JavaScriptCore の基本のところをざっくり紹介します。
Swift で JavaScript 始めませんか?
最近プログラミングの楽しさを伝えていとおもっていて2つほど勉強会しています
新しい勉強会始めます
ネットラジオも始めました
本編
面白いのがSwift都の相互運用が簡単にできること。
バーチャルマシーンを作ってその上でJavascriptを動かす環境
全然考えてませんでした(・ω<)
過去にJavaScriptCoreにリンクされているとリジェクトされるとか書いてあったが、なんかいろいろサポートされているしそろそろ使えるのでは?
使いたくなりました?
なりましたね?
JavaScript API
一般的なものはあるがWebでおなじみなDOMは無い。非常にまっさらな環境が作られて、必要な機能を揃えていって使う。
コンテキストに自分でプログラムしてあげる。
JavaScriptを使ったりSwiftを使ったりして変数関数を揃えていって環境を作る。
面白いのはSwiftの変数を設定できる。参照型だと共有される。
Swiftのクロージャーも渡せる。AnyObjectである必要があるので @convension(block)
が必要。
Swiftの型をそのまま使ってしまう。
これでJavaScriptで使えちゃう。
JavaScript側から必要に応じてインスタンス化することが出来る。
Swiftのオブジェクトそのまま使えるのすごくないでしょうか!
最後に一つ
Xcodeで補完したりして書けるようになる。
Contextに流し込む
JavaScriptから自在にSwiftを扱える感じをおわかりいただけたでしょうか
審査通るかは、、、後日!
Q&A
EcmaScript6は使えますか
SafariのCoreで使っているものなので、どうだろう。。
「RealmのJSはJavaScriptCoreでES6の機能を使えています」(岸川さん)
とのことです
JSでSwiftオブジェクトを参照した時にメモリ管理はどうなるのか
把握できていないがJSマネージドバリューという型があったりして、そのあたりを追っていくと参照まわりが見えてくるかもしれないです。
ReactNativeはJavaScriptCore使っていたので審査通るのではないかと思います。
いい情報をありがとうございます。
まとめ
「Swift で JavaScript 始めませんか? -JavaScriptCoreを用いたモバイル開発- #iosdc #a」をトゥギャりました。 https://t.co/vj21oSUqtW
— トゥギャッター開発まとめ (@tg__dev) 2016年8月20日