2017年7月20日木曜日

[Kotlin]スコープ関数のlet, with, run, apply, also の違い

を3日くらいにらめっこして、Kotlinのスコープ関数の違いについてざっくりとまとめてみました。

確認環境
Android Studio 3.0 Canary 7
Kotlin 1.1.3-2
macOS Sierra 10.12.15


returnがレシーバ returnが任意
レシーバの
拡張関数
apply with
run
任意の型の
拡張関数
also let

レシーバの拡張関数のとき
  • thisがラムダ式の内と外で参照先が違う
  • レシーバのprotected, privateの関数は呼び出せない
  • this@MainActivityのような記述で、外のthisも呼び出し可能

任意の型の拡張関数のとき
  • thisがラムダ式の内と外で参照先が一緒
  • レシーバをitで呼び出せる
  • itの代わりに任意の変数名の定義も可能(可読性UPに繋がる)

returnがレシーバのとき
  • 戻り値がレシーバ自身なので、用途に合っていれば1行コードが減る

2017年1月11日水曜日

WebViewでハマってたところをCrosswalkで解決

ifreamを含むページがWebViewでうまく動作してくれない(ブラウザアプリで表示とWebViewで表示とで、挙動が一致しない)問題に直面し、ハマっておりました。

WebViewをIntelが開発しているオープンソースライブラリCrossWalk のXWalkViewに置き換えたところ、ifream内も正常に動作してくれました!

置き換え時にやったこと


1.app/build.gradle

repositories {
    maven {
        url 'https://download.01.org/crosswalk/releases/crosswalk/android/maven2' 
    }
}

android {
    // ...
}
dependencies {
    // ...
compile "org.xwalk:xwalk_core_library:17.46.448.10"
 // ...
}

2.Java

  • webview.getSettings().setJavaScriptEnabled(true)の設定は削除(該当メソッドは無いけど、javascriptは有効になってるっぽい)
  • webView.loadUrl -> loadに変更
  • @JavascriptInterface -> @org.xwalk.core.JavascriptInterfaceに変更
  • webview.setWebViewClient -> setResourceClientに変更
    • shouldOverrideUrlLoading 継承(遷移しようとするURLの取得)。戻り値にtrue
    • WebViewClient#onPageStartedのかわりにXWalkResourceClient#onLoadStartedを継承
    • WebViewClient#onPageFinishedのかわりにXWalkResourceClient#onPageFinishedを継承

3.xml

  • <WebView を <org.xwalk.core.XWalkViewに変更


License

3-clause BSD license(三条項BSDライセンス) (New BSD License(修正BSDライセンス ) とも呼ばれている)
ライセンスと著作権の表示が必須で、商用利用、修正、配布、派生物に別の条件を課すことが可能です。

参考