【SwiftUI】複数のScrollViewを同期させる
実装するもの

SwiftUIのScrollViewは、コンテンツのオフセット量(スクロール量)を指定することができないため、上記のような、スクロールが連動するようなUIを実装できませんでした。
そこで、UIScrollViewを使用することで、目的の実装が可能でした。
実装イメージ
- UIViewController:UIScrollViewの親View。レイアウト周りの処理も実行
- UIScrollView:スクロール可能にする
- UIStackView:スクロール可能な方向を決定する(これがないと、スクロールが引っ掛かるような挙動になる)
- UIHostingController:SwiftUIのViewを表示するためのView

最終的には、UIViewControllerRepresentableを経由させて、UIViewControllerをSwiftUI側から呼び出します。この際に、ScrollViewのコンテンツになるViewを引数として渡します。
最終的なソースコードのリンクを添付します。 I created Sync ScrollableView in SwiftUI · GitHub
また、このScrollViewを使って、スクロール時にヘッダーを固定できる表のUIを作成しました(元々このために作った) 上記のリンクに、サンプルコードを載せています。

参考記事
Haskell勉強メモ(6〜最終章)
メモ
関数
- 関数は引数を変換して、値を返す
- 関数は1文字で置き換えられていると意味がとりずらい
型クラス
- 型クラスは振る舞い(関数)を定義する(Kotlinのinterfaceのようなもの)
- instanceは、型クラスの振る舞いを満たすもの
Functor、Applicative Functor、Monad
- Functor、Applicative Functor、Monadは文脈を保つ(伝搬する)型クラス
参考にさせていただいた記事
- KotlinでのFunctor、Applicative Functor、Monad
- 左側/右側畳み込みについての補足記事
まとめ
感想
今後
- 文脈を保ったまま、関数を適用したいといったシチュエーションに今後直面した時、Haskellで学んだMonad的な実装を試してみたい
- 今後は、Haskellで何かを作ってみたり、KotlinでFunctional Programmingを意識したコーディングをしてみたい
- 関数型プログラミングを身につけ、副作用の少ないテストしやすいコードを書きたい
Haskell勉強メモ(1〜5章)
勉強資料
文法について
- 数学の記法に似ている
- 変数を"束縛する"という考え方が強い
- 配列を1つの集合と見る感覚
- 関数は全て1引数の関数(カリー化関数)に分解されていて、どこで区切るかが自由
- 関数は、関数名 引数 = 戻り値
再帰関数のコツ
- 基底部(例外的なもの)を考える
- 繰り返される処理を実行し、自身を呼び出す
カリー化と部分適用
- カリー化
- 多引数の関数を1引数の関数に変換すること
部分適用
- 多引数の関数にいくつか引数を与えて、部分的に引数を適用すること(関数を束縛している)
型シグネチャによる関数の意味の読み取り方
- 引数と戻り値に分けて考えると意味がとりやすい
$と.の違い
$- 関数適用の優先順位を変えるもの
.- 関数合成。関数をまとめるという考え方
畳み込みについて
...
Haskellの環境構築(M1 Mac)
Haskellの環境構築を行いました。参考にさせていただいた記事を添付します。
ghcup + VSCodeでの環境構築について
cabalを使用したHaskellプロジェクトの作成
cabalプロジェクトの実行
$ cabal runをターミナルで入力- The Haskell Cabal | Overview
VSCodeからPyCharmへ乗り換え時のメモ
経緯
以下の恩恵を受けたいと思い、VSCodeからPyCharmへ乗り換えようと考えました。
- Auto Importをしてくれる
- Inspection機能が優秀なこと(Python初心者のため、あると嬉しい)
加えて、普段AndroidStudioを使用しており、IDEの仕様に慣れているため(ショートカットキーなどが同じ)、Pythonでの開発に集中できることも大きいです。
環境構築
仮想環境で新規プロジェクトを作成したいと思います。
- NewProjectを選択
- 仮想環境で使用したいバージョンのPythonを
pyenvなどで準備しておく* - Interpreter type: Custom environment、Type: Virtualenv、Base python: "2"で入れたPythonを選択して作成
*について
pyenv install --list # install可能なもの一覧表示 pyenv install 3.12.3 # 指定してインストール pyenv versions # pyenv管理下にあるPython一覧表示

その他やったこと
- PyCharmの設定をカスタマイズ
- 外部パッケージのインストール方法の確認
移行した感想
移行して良かったと思います。 自動importはやはり便利でした。パッケージのインストールもGUIでできることに驚きました。また、PEP8のコーディング規約に基づいて警告が出るので、Pythonでも問題なくチーム開発できそうだなと思いました。
参考
FastAPIでCRUD可能なAPIサーバーをたてる
目的
- 手軽にAPIサーバーを立てられるようになりたい
- 個人開発やテストのため
目標
環境構築
こちらの記事を参考にしました
環境
FastApiのインストール
% pip install "fastapi[all]" // pip install fastapiでは依存関係が解決できませんでした. % pip list fastapi 0.111.0
実装
- 以下の記事を参考にさせていただきました