customObjectFirebaseのリアルタイムデータベースに保存するものがあります:
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.namelistDictionary
Appleのドキュメントによると
ディクショナリは、順序が定義されていないコレクション内の同じ型のキーと同じ型の値の間の関連付けを格納します。各値は、ディクショナリ内のその値の識別子として機能する一意のキーに関連付けられています。配列内の項目とは異なり、辞書内の項目には順序が指定されていません。識別子に基づいて値を検索する必要がある場合は、実際の辞書を使用して特定の単語の定義を検索するのと同じように、辞書を使用します。
からを使用didSetして作成することは、ベスト プラクティスと見なされますか?ArrayDictionarycustomObjects
sortingとlisting customObjectsからのより良いアプローチはありDictionaryますか?
