Swift のキーワードを今更ながら調べる

最近ずっと避けてきた Swift のキーワードを勉強しています.(^_^;
正直ジェネリクスを利用したヘッダーはノリでは分かる,もしくは,分かった気になれますが,完全に理解するのは私にはとても忍耐がいる作業です.

参考になったページをメモしておきます.

typealias
associatedtype
ジェネリクスの<>の記述が分からない場合に参考になると思います.

【Swift】associatedtypeの使いどころ
typealiasというSwiftの仕様を把握する
→ 言語仕様が変更されて一部,associatedtype にする必要がある.
【Swift】ジェネリクスが使われているメソッドを理解する

RxSwift 個人メモ

iOS アプリの Reactive プログラミングは,最終的には Apple 謹製のフレームワークになるかと思いますが,世の中には既に RxSwift を利用した iOS アプリが多数存在しながらも,学習コストが比較的高い分野のため,開発フェーズ後はメンテできる人がおらず,手つかずになっているアプリも沢山あると想像しています.

最初にRxSwiftに入門した際には,概念を把握するのにとても苦労しました.
理由は,体系的に説明された資料が見つけられず,ネットの断片的な資料を探すことから始めたため,概要の把握が思いのほか大変であったためです.

個人的なメモですが,最初に知っておくべき概念,用語,何度も見返したい参考ページをまとめます.

▼ Rx とは?
Rx(Reactive X)とは,「オブザーバパターン」「イテレータパターン」「関数型プログラミング」の概念を実装している拡張ライブラリ.
Rxの導入メリットは,「値の変化を検知できる」「非同期の処理を簡潔に書ける」こと.
値の変化には,変数値の変化やUIの変化も含まれる.

▼ Rxの三要素
– Observable
– Operator
– Scheduler

▼ Reactive Programming 概要
SwiftでReactive Programming

▼ RxSwift で参考になった資料
RxSwiftの機能カタログ
俺はこれでRxSwiftを学んだ!リファレンス集
[RxSwift] shareReplayをちゃんと書いてお行儀良くストリームを購読しよう
[Rx入門] Subject詳解 / Hotな、ColdなObservableのこと
RxSwiftのobserveOnとsubscribeOnを理解する // Speaker Deck
よく使いそうなRxSwiftのオペレーターの勉強をしてみた(flatMap, flatMapFirst, flatMapLatest 等)
RxSwift のスケジューラ
→ observeOn,subscribeOn の違いについて参考になった.
RxSwift4で廃止になった Variable のリプレイス

▼ サンプル コード
RxExample MVVM のその先へ(Fat ViewModel の倒し方)
RxSwiftとUIライブラリの表現を組み合わせたサンプル紹介
リバース・エンジニアリング – RxSwift

▼ 用語 について
Observable イベント発生元
Observer イベント処理

▼ Observable の破棄
– disposeBagで破棄する.
– subscribeメソッドの戻り値Disposableインスタンスに対してdispose()メソッドを呼び出す方法.

▼ Driver/Signal
Driver
subscribe()後,イベントを1つ流してほしい場合に使用する.
(UITextField の入力文字列,UIButton の有効/無効状態など)
Signal
subscribe()後,イベントが発生するまで,イベントを流さないで欲しい場合に使用する.
(UIButton のタップイベント,アニメーションの完了イベントなど)

▼ Hot/Cold
Subject から送出される値が「Hot」,それ以外が「Cold」.
Cold を Hot に変換するには,以下のメソッドを使用する.
Publish()メソッドは,Hot 変化オペレータ.Connect()メソッドは,ストリーム開始.

– share(replay: 1)は,Cold Observable を Hot Observable へ変換するためのオペレータ.

▼ Hot な Observable の特徴
– subscribe されなくても動作する
– 複数の箇所で subscribe したとき、全ての Observable で同じイベントが同時に流れる.

▼ Cold な Observable の特徴
– subscribe したときに動作する
– 単体では意味がない
– 複数の箇所で subscribe した時,それぞれの Observable でそれぞれのイベントが流れる.

▼ Subject/Relay
Subject「通信処理や DB 処理等」エラーが発生したときにその内容によって処理を分岐させたい
Relay UI に値を Bind する
– PublishSubject
– BehaviorSubject
– PublishRelay
– BehaviorRelay

マイナンバーカードを申請した件

必要性を感じたことがなかったので作っていなかったのだが,マイナンバーカードを申請することにした.
理由は,マイナポイント事業というのが今後展開されて,詳細不明だけど…ポイントがもらえるというのを知ったからです.
マイナポイントを個人が利用しているポイント(楽天ポイントなど)として取得することができるようです.
楽天カードの場合,対象期間にクレジットカード利用で最大5,000ポイントもらえるようです.

ざっくりまとめると,
マイナンバーカードとクレジットカードを紐付けると,5,000ポイントがもらえる
ということだと思います.

ということで,登録します.(笑)
マイナンバーカード取得には,約1ヶ月かかるとのこと.

郵送はめんどくさいので,ネットで申請します.
参照したページは以下の通りです.
マイナンバーカードでマイナポイントをもらおう
マイナンバーカード交付申請
パソコンによる申請方法
登録内容は,以下の事柄です.
– メールアドレス登録
– 顔写真登録
– 申請情報登録

マイナンバーカードの受け取り
マイナンバーカードの受け取りは事前予約制とのこと.
予約がないと受取ができないことに注意.
マイナンバーカード(個人番号カード)を申請された方へ 東京都北区

この手順を知って感じたのは,申請すると直接自宅にマイナンバーカードが届くのではないということに驚きました.
個人に本人確認して送付物を渡すというのは手間のかかる作業なのですね.

ところで,高齢者の方は,番号のことを「コード」と言われたり「ID」と言われたりした途端に申請できない気がします.
用語についても「マイナンバー」だったり,「個人番号」だったり…受取は事前予約であったり…もろもろめんどくさいので考えないこととします.(笑)

SS の乗車姿勢がまだ分からない

SSの乗車姿勢に馴染めず,1年ほど体を慣らしていたのですが,ようやくサーキットを走ってきました.
私の場合,自走で現地まで向かうことになるので,2時間程度かけて現地に出向き,スポーツ走行を行い,帰宅する行程を全てSSで走ることになります.
1日約5時間程度は軽い腕立てができる程度の体力が必要になるのですが,その体力をつけるのに1年を要してしまいました.
効率を考える人であれば,トランポを用意するのでしょうが…

工具などは以前より用意していたのですが,ようやくミラーを外して本来の姿とご対面です.
タイヤも1年たってもひげが残っている状態で温存していたのですが,ようやくサイド トレッドを使うことができました.

残念ながら,リア190サイズのトレッドを全部は使うことはできませんでした.
これは未だバンクした車体のどこに体をどういう風に置くのか?ということが理解できていないためです.
MT-09で最初に乗ったときもそうでしたが,リラックスして乗車することができず,上体がかなり高い位置に残ったままという問題がありました.
R1000でもその状態なのだと思います.早く改善したいです.(結構,タンクを抱える感じで乗ったんだけどなー)
あと,バンクセンサーの位置もネイキッドとSSでは変えた方がいいように感じました.

ネイキッドでの走行経験と比べて,R1000入門者でもすぐに理解できた素晴らしい点

・クイックシフター
・エンジンがなめらかに回り,どこからでもパワーが出ます
・車体の剛性,バランスが非常に高い
・トラクションコントロール,ABSなどのサポート

MT-09だとアクセルを開けていった際に若干フロントが軽くなるコーナーがあったのですが,それらの不安は感じることがありませんでした.
(フロントが着地した後,振られると怖いんだよなー)
また,不用意に少しでもアクセルを戻した場合にエンジン回転の滑らかさが失われて,振られることがあったのですが,そのようなこともありませんでした.
車種,メーカーによるとは思いますが,ABS の効き味が異なると感じました.
(MT-09では普通に走行できていた速度で感じたので原因が正確には理解できませんでしたが,多分,ABSだと思います.でも,あんな速度でABS作動するかな…)

【後日談】ABSではなく,車種が異なることによるフロントからのインフォメーションの違いだと思います.SSってとてもダイレクトにインフォメーションがあるのだと知りました.

はやくスムーズに扱えるようになりたいものです.

Swift Embedded Framework

また知らない言葉があったので,調べてみました.
Swift Embedded Framework.
Xcode6から利用できるようなので,リリース自体はかなり前のようですが,私は積極的に採用したプロジェクトに参画したことがありません.
一応参考となるリンクをメモしておきます.

Swift Embedded Framework の導入
Embedded Framework使いこなし術
Embedded Frameworkの導入方法

Swift の associatedtype を最短で理解できたページ

associatedtype キーワードがよくわからなかったので調べたのだが,ジェネリックがどうとか難しいページが多かった.
キーワードの意味だけをわかった気になりたかったのだが…
以下のページを見ると2分くらいで理解できました.

associatedtype とは,protocol を定義する時には型が決まっていないものに使用する.
protocol 実装側で型を決められるようになる.

swiftの謎キーワードだったassociatedtype, mutating, subscriptについて

SwiftUI 個人メモ

SwiftUIの情報をまとめました.
正直キャッチアップはめんどくさいですが,切り捨てられない程度に時代について行きます.
ある程度時代の方向性が定まってから,最短ルートでついて行くつもりですが,SwiftUIに関する仕様の変更点は,まだまだあるのかもしれません.

– 概要の把握には以下の記事が参考になります.
SwiftUIの考察

– コードのサンプルには以下の記事が参考になります.
Apple Developer – SwiftUI Tutorials
Introducing SwiftUI
Fucking SwiftUI
カピ通信 SwiftUI

– SwiftUIサンプルコードを見ていると見慣れない some というキーワードが散見されますが,Swift 5.1 で導入される Opaque Result Type は以下の記事が参考になります.
Swift 5.1 に導入される Opaque Result Type とは何か

– 実際のアプリにSwiftUIを用いる際には,一部のビューから導入するというのが現実だと思われます.
一部の画面だけSwiftUIを使いたいとき

– Xcode11.4を触っていて見慣れない SceneDelegate.swift というのがあったので,調べます.
SwiftUIを触って分かったこと:①初期画面の設定方法

その他,見たことがなかった属性についてもまとめました.
@State
– SwiftUIのViewはstructのため,通常の値を更新することができない.@Stateを宣言することで,メモリの管理がSwiftUIフレームワークに委譲されて値を更新することができる.
– @Stateで宣言されたプロパティを子Viewに渡す時は、プロパティ名の頭に$をつける.プロパティの値そのものではなく、プロパティへの参照を渡すイメージ.
– @Stateは,値をコピーする.

@ObservedObject
– データクラスに対しては,@ObservedObjectを使用する.
– @ObsevedObjectは,View の外部からデータを取得する際に利用する.
– @ObsevedObject に@Published 属性を持つプロパティを用意する場合、そのプロパティに変化があればそのプロパティを利用する View が更新される.

@Binding
【SwiftUI】@Stateとか@Bindingて何

– @BindingをつけてやるとView間での双方向のデータ共有が可能となる.
– 子View側では、@Stateではなく@Bindingでプロパティを宣言する.
– 自らは保有せずに、親のプロパティを参照する.
– @Binding は実体を保持せず、参照してデータソースの値を変更する.
– 利用するデータソースを複数にせず、一つの正しいデータソースのみを参照し変更することで不具合を避けることができる.

@Environment
– @EnvironmentObjectを付与したプロパティは複数のViewで共通のインスタンスを参照する.(アプリ全体で共通のプロパティ)

@ViewBuilder
SwiftUIのViewBuilderについて調べてみる