新しい技術については、必要に迫れられることがない限り、体系立てた知識の整理ができていません。あまり利用しない技術についてはすぐ忘れてしまうのです。(笑)
SwiftUIについても数年前から、調べては忘れてを繰り返しているのですが、再度、調べる際にメモがあると早く思い出せるようなので、今回もメモしておきます。
【PropertyWrapperの内部変数にアクセス】
PropertyWrapperを定義したプロパティに「_」をつけることで、PropertyWrapperの内部変数にアクセスする。
(ObjCのメンバ変数の表記に似ているので抵抗がありますが、間違いみたいではないのでメモしておきます。)
@Binding var isPresented: Bool
init(isPresented: Binding) {
self._isPresented = isPresented
}
【$ と projectedValue】
「$」をつけると射影プロパティにアクセスできる。また、内部変数(_をつけた変数)から projectedValue というプロパティへアクセスするのと等価になる。
_isPresented.projectedValue
$isPresented
【SwiftUI Non-constant range 警告】
「Non-constant range: argument must be an integer literal
」という warning が出力される場合は、以下の様に対処できる。
ForEach(0 ..< myArray.count) { index in
...
}
↓
ForEach(0 ..< myArray.count, id: \.self) { index in
...
}
参考:SwiftUI ForEachのNon-constant range警告
【KeyPath の利用】
List など作成する場合に表示データを以下の様な DataModel で表現した場合、初期化パラメータに KeyPath を利用した記述ができる。
struct DataModel: Identifiable {
let id = UUID()
let name: String
var subItems: [DataModel]?
}
init(
data: Data,
children: KeyPath<Data.Element, Data?>
:
省略
:
// パラメータ指定時には以下の様に KeyPath を用いて記述できる
children: \.subItems