customObject
Firebaseのリアルタイムデータベースに保存するものがあります:
struct CustomObject: Codable {
var id: UUID?
var name: String?
var status: String?
}
は、次のcustomObjects
ように に格納さDictionary
れUUID
ますkey
。
iOS アプリケーションの にデータをロードすることはできます[String: CustomObject]
Dictionary
が、 を使用して を並べ替えて表示するcustomObjects
方法List()
ForEach(...) {
がベスト プラクティスであるかどうかはわかりません。
私の現在の解決策は、がロードされたArray
ときにビルドすることですDictionary
didSet
データベースが更新されるたびに使用Array
して、で使用できるを再作成しlist()
ます。
class AppManager: ObservableObject {
@Published var customObjectArray: [CustomObject] = []
@Published var customObjectDictionary: [String:CustomObject]? {
didSet {
if customObjectDictionary != nil {
customObjectArray = []
for (key, value) in customObjectDictionary! {
var tempObject: CustomObject = value
tempObject.id = UUID(uuidString: key)
customObjectArray.append(tempObject)
}
customObjectArraySort()
}
}
}
}
これは私のView
です:
struct MainView: View {
@EnvironmentObject var app: AppManager
var body: some View {
List {
ForEach(app.customObjectArray.indices, id: \.self) { index in
HStack{
Text(app.customObjectArray[index].name ?? "")
Spacer()
Text(app.customObjectArray[index].status ?? "")
}
}
}
}
}
a は順序付けされていないコレクションであり、 aで aDictionary
に基づいてソートしようとするのは不適切であることを認識しています。customObject.name
list
Dictionary
Appleのドキュメントによると
ディクショナリは、順序が定義されていないコレクション内の同じ型のキーと同じ型の値の間の関連付けを格納します。各値は、ディクショナリ内のその値の識別子として機能する一意のキーに関連付けられています。配列内の項目とは異なり、辞書内の項目には順序が指定されていません。識別子に基づいて値を検索する必要がある場合は、実際の辞書を使用して特定の単語の定義を検索するのと同じように、辞書を使用します。
からを使用didSet
して作成することは、ベスト プラクティスと見なされますか?Array
Dictionary
customObjects
sorting
とlisting
customObjects
からのより良いアプローチはありDictionary
ますか?