Kotlinでよく使う記法をSwiftで記述する方法

久々にiOSアプリのコードを書く機会があったのですが、「KotlinのあれってSwiftではどう書くんだっけ?」となる場面が結構多かったので、順次まとめていこうと思います。

  • Smart Cast
  • nullチェックによる早期return
  • when式
  • 値に対応するenumの取得
  • Sealed Class
  • 遅延初期化


なお、シンプルな置換でおおむね完結するものについては、以下の表などをご参照ください。

https://willowtreeapps.com/ideas/swift-and-kotlin-the-subtle-differencesより引用

続きを読む

V8ランタイムに対応したGoogle Apps ScriptでGoogleカレンダーの予定をLINEに通知するスクリプトを書いた

Google Apps Scriptがいつの間にかV8ランタイムに対応し、新しいECMAScriptの構文が使えるようになっていました。

developers.google.com


ちょうどGoogleカレンダーの予定をLINEに通知するスクリプトを書こうと思ったタイミングでこのことに気づいたので、新しく使えるようになったECMAScriptの構文を使いながらスクリプトを書いてみました。

  • スクリプト作成の経緯と仕様
  • 今回作成したスクリプト
  • 今回使った新しいECMAScriptの構文
    • let、const
    • アロー関数
    • テンプレート文字列
  • その他の便利な構文など
    • 関数名.nameで関数名の文字列が取得できる
    • 関数名の末尾に_を付けると「関数を選択」の候補に表示されなくなる
  • 不便と感じた点
  • まとめ
続きを読む

asyncAll()という拡張関数を作ってKotlinのリスト操作の中で並列処理を実行する

前回の記事でawaitAll()を使ったリスト操作の中で並列処理を実行した結果の待ち合わせについて書きました。

tkhs0604.hatenablog.com


その中で、並列処理を実行するときに毎回map { async { hoge() } }と書くのは辛いと思ったので、asyncAll()という拡張関数を作りました。

続きを読む

Kotlinのリスト操作の中でCoroutinesのasync()で並列処理を実行した結果を待ち合わせる方法

タイトルが非常に分かりづらくて申し訳ないです🙇‍♂️
Kotlinのリスト操作の中でネットワーク通信のような時間のかかる処理を並列に実行したい場面があったのですが、Coroutinesを使ってその結果を待ち合わせる方法が最初分からなかったので、本記事はそのメモです。

続きを読む

OSバージョン間の差分を考慮したAndroidのThemeの定義方法

OSバージョン間の差分を考慮したAndroidのThemeの定義方法について整理してみました。基本的にはAppCompatライブラリの定義方法を参考にしています。
Themeについては以下の公式ドキュメントをご参照ください。

developer.android.com


以降は、Android 7.0で追加されたマルチウィンドウAndroid 9で追加されたディスプレイ カットアウトに関する設定をThemeに追加するケースを例とします。

続きを読む

AndroidでHaptic Feedbackを実装する

本記事では、iOSではおなじみのHaptic Feedback(触覚フィードバック)をAndroidで実装する方法について記載しています。
Android Dev Summit 2019」の動画で実装例が紹介されていたので、こちらを参考にしました。


Haptic FeedbackについてはMaterial Designの以下のページが参考になります。

material.io

続きを読む

ディスプレイにおける解像度の話

解像度についていろいろと調べてみました。
調べていると、解像度の表す意味が分野によって異なることが分かったので、本記事ではPCやスマートフォンのディスプレイにおける解像度についてのみ取り扱います。

なお、本記事は各用語の大まかな意味を理解することを重視しているため、正確でない表現がある可能性があります。
説明として明確に誤っている内容がありましたらご教示いただけますと幸いです🙇‍♂️


続きを読む

ConstraintLayout下でlayout_widthにwrap_contentを指定したTextViewが制約を無視してはみ出すときの対処法

(タイトルが長い…笑)

以下のようなレイアウトを作成するときにハマった話です。
左右に可変テキストがあり、テキストが長くなって画面に収まらなくなるときに左側の可変テキストの末尾が省略される仕様を想定しています。
(余談ですが、Layout Editorではandroid:ellipsize="end"の指定は見た目に反映されないのですね…)

f:id:tkhs0604:20200516093441p:plain:w400
デフォルトのレイアウト
f:id:tkhs0604:20200516093444p:plain:w400
左側の可変テキストが長くなったとき
f:id:tkhs0604:20200516093449p:plain:w400
右側の可変テキストが長くなったとき
続きを読む

Dartのコンストラクタの書き方

最近Flutterの勉強を始めたのですが、Dartのコンストラクタの書き方が今まで触ってきた言語(主にKotlin、Java)に比べて少しとっつきにくく感じたので、基本的な部分を整理するために書いている記事です。

内容としては、主に以下のページから関連する箇所をピックアップしたものになります。

dart.dev


続きを読む