SwiftUI

【memo】
-
private: View内のみアクセス可能
-
struct HogeView<T>: View where T: HogeViewProtocol {
-
: View
=> HogeView<T>という構造体がViewプロトコル
に準拠する、という定義。 -
where T: HogeViewProtocol
=> TはHogeViewProtocolで定義されたルールを満たす必要がある、という定義。
-
-
@Environment(\.path)
- 環境から特定の値を読み取るためのプロパティラッパー
-
managedObjectContext
:Core Data(≒ ローカルDB)パス -
@ObservedObject
: 外部の監視可能なオブジェクトの状態変化をViewに伝える役割-
@ObservedObject は、監視している ObservableObject プロトコルに準拠した外部のオブジェクトの、 @Published プロパティの値が変更された時に、その @ObservedObject を使用している View コンポーネントに通知し、Viewの再描画をトリガーする役割を持ちます。
-
viewModelの変更を監視し、変更があればViewを自動的に再描画
用途: MVVMパターンにおいて、ViewModelからの状態変更を監視するために使用。
この場合: HogeViewProtocolに準拠したViewModelを監視し、そのデータ変更に応じてUIを更新
-
-
@StateObject:
@ObservedObject
と似ている概念。- StateObjectがuseStateで、@ObservedObjectがuseStateを引数に渡して検知用に使用するイメージ。
-
@Binding
-
これは、このプロパティが直接的な値を保持するのではなく、別の場所にある状態への参照を持つことを意味します。
@Binding を使用すると、このプロパティを通じて値を変更すると、元の状態も同時に更新されます。つまり、Viewとそのデータの源泉との間に「結びつき(binding)」が作られます。 - ≒hooksのuseStateの関数を引数として渡すようなイメージ。
-
-
@State: Viewの内部状態を管理するためのプロパティラッパー。値が変更されると自動的にViewが再描画される
- hooksでいうuseState

-
Property Wrappers:@付きのattribute(属性)
- @State
- @Environment
- @ObserveObject
- @Binding
- etc.
- イニシャライザを見て、呼び出し時に必要な引数を確認する。
-
_変数名 = hoge
とは?- propertyWrapperのインスタンス。値を変更する際(値にアクセスする際)は、
_変数名
とする。
- propertyWrapperのインスタンス。値を変更する際(値にアクセスする際)は、

- ViewModifier:
-
A modifier that you apply to a view or another view modifier, producing a different version of the original value.
- Viewの装飾子。Style付与や関数付与のようなイメージ。
- デフォルトのもののあるし、カスタム作成も可能。
-
- .onReceive
-
Adds an action to perform when this view detects data emitted by the given publisher.
- ≒ 指定のイベントを受取り、関数を発火させる。
-
- Combine
- Apple公式のリアクティブプログラミングのためのフレームワーク
- リアクティブ ≒ Stream
- Combineの主要な要素
- Publisher: 時間とともに変化する可能性のある値(イベント)を生成し、送信します。NotificationCenter、URLSession、タイマー、ユーザーの入力など、様々なソースからの値をPublisherとして扱うことができます。
- Subscriber: Publisherから送信される値を受け取り、それに応じた処理を行います。SwiftUIのViewは、Publisherの値を監視し、変更に応じてUIを更新するSubscriberとして機能することがよくあります。
- Operator: Publisherから送信された値を変換、フィルタリング、結合などの中間処理を行います。これにより、複雑なデータ処理を宣言的に記述できます。map、filter、reduce、combineLatest、debounceなど、多くのOperatorが用意されています。
- Subscription: PublisherとSubscriberの間の接続を表します。SubscriberがPublisherを購読(subscribe)することで確立され、データの流れが開始されます。Subscriptionをキャンセルすることで、データの流れを停止できます。
- 詳細は記事がHitするので、いろんな記事見て確認する。

PreviewProviderはXcodeのPreview機能。開発用。
新しいswiftUIで古い記法になってる。

fullScreenCover
フルスクリーンカバー(fullScreenCover)の content は、カバーが表示されている間、常に描画され続けています。発火という特定のイベントが発生するわけではありません。
どちらかというと、fullScreenCover が表示されるという条件で content が初めて描画され、fullScreenCover が閉じられるという条件で描画が終了すると捉える方が適切です。
fullScreenCover の content が「発火する」というよりは、「表示条件が満たされた時に描画され始める」と理解してください。そして、その表示が続いている間は、content 内のビューは通常通りライフサイクルに沿って更新され続けます

docコメント
swiftのdocコメントについてもちゃんとドキュメント読んだうえで対応したい。
後ほど参照:
delegate
とは。
SwiftUI と AppDelegate:
SwiftUI は比較的新しいフレームワークであり、多くのアプリケーションライフサイクルイベントは @main アノテーションが付いた構造体を通じて管理できます。しかし、依然として UIKit の機能に依存する部分や、より低レベルのシステムイベントを処理する必要がある場合があります。@UIApplicationDelegateAdaptor は、そのような場合に従来の AppDelegate を SwiftUI アプリケーションに統合するための仕組みを提供します。@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate を宣言することで、SwiftUI は AppDelegate クラスのインスタンスを生成し、アプリケーションのライフサイクルに合わせて適切なデリゲートメソッドを呼び出します。これにより、SwiftUI アプリケーション内から UIKit のデリゲート機能を活用できるようになります。
まとめると、@UIApplicationDelegateAdaptor を使用して設定されたデリゲートは、アプリケーションのライフサイクル全体にわたる重要なイベントを捕捉し、それに対応するためのカスタムロジックを実装するために使用されます。

enum
Flutterとswiftのenumの違い
TBD

シンタックスシュガー
// 両方とも同じ型の変数を定義しています
var items1: Array<Int> = [1, 2, 3]
var items2: [Int] = [1, 2, 3]print(type(of: items1)) // Array<Int>
print(type(of: items2)) // Array<Int>