私はpalettes
のすべての子を実行するコードを持っており、色の16進数がそれらの子の値のいずれかと一致するかどうかを調べます。一致するものがある場合は、childByAutoID
のURLを抽出して配列に追加します。返される値が配列に1回だけ追加されることをクエリして確認するにはどうすればよいですか?
databaseRef.child("palettes").queryOrdered(byChild: "top").queryEqual(toValue: text).observeSingleEvent(of: .value, with: { (snapshot) in
if let snapDict = snapshot.value as? [String:AnyObject]{
for each in snapDict as [String:AnyObject]{
let _URL = each.value["URL"] as! String
self.arrayVar.append(_URL) // Turning it into an array.
}
}
})
databaseRef.child("palettes").queryOrdered(byChild: "bottom").queryEqual(toValue: text).observeSingleEvent(of: .value, with: { (snapshot) in
if let snapDict = snapshot.value as? [String:AnyObject]{
for each in snapDict as [String:AnyObject]{
let _URL = each.value["URL"] as! String
self.arrayVar.append(_URL) // Turning it into an array.
}
}
})
databaseRef.child("palettes").queryOrdered(byChild: "accessories").queryEqual(toValue: text).observeSingleEvent(of: .value, with: { (snapshot) in
if let snapDict = snapshot.value as? [String:AnyObject]{
for each in snapDict as [String:AnyObject]{
let _URL = each.value["URL"] as! String
self.arrayVar.append(_URL) // Turning it into an array.
}
}
})
databaseRef.child("palettes").queryOrdered(byChild: "shoes").queryEqual(toValue: text).observeSingleEvent(of: .value, with: { (snapshot) in
if let snapDict = snapshot.value as? [String:AnyObject]{
for each in snapDict as [String:AnyObject]{
let _URL = each.value["URL"] as! String
self.arrayVar.append(_URL) // Turning it into an array.
}
}
})
}
しかし、これに伴う問題は、2つの同様の値が同じchildByAutoID
の内側に存在する場合には、それは二回「URL」を追加することです。
{
"palettes" : {
"-KTjfdgcwdkF5j3OWOg8" : {
"URL" : "test1",
"accessories" : "#000000",
"bottom" : "#2B676E",
"shoes" : "#000000",
"top" : "#274E64"
},
"-KTji_7xUNu2PejD4Xz6" : {
"URL" : "test2",
"accessories" : "#2B6766",
"bottom" : "#2B676E",
"shoes" : "#000000",
"top" : "#274E64"
}
}
}
arrayVar
が印刷されたときに#000000
がtext
に等しく、とき[test1, test1, test2]
を返します。
は、ここに私のJSONツリーの例です。
URLをchildByAutoID
に1回だけ追加するにはどうすればよいですか?たとえば、[test1, test2]
です。
var arrayVar = NSMutableDictionary()
databaseRef.child("palettes").queryOrdered(byChild: "shoes").queryEqual(toValue: text).observeSingleEvent(of: .value, with: { (snapshot) in
if let snapDict = snapshot.value as? [String:AnyObject]{
for each in snapDict as [String:AnyObject]{
let _URL = each.value["URL"] as! String
self.arrayVar.setObject(true, forKey: _URL as NSCopying)
}
}
})
あなたのURLを取得するにはちょうどです: - - は:
for eachUrl in arrayVar{
let url = eachUrl.key
}
をナビゲート
なぜ私は配列形式にする必要があるのかは、コレクションビューを作成するために使用する必要があるからです。したがって、これらのURLは画像に変換され、コレクションビューに表示される前に画像の配列を形成します –
回答更新...辞書を簡単にナビゲートすることができます。配列全体を繰り返し、必要な値をチェックしているので、既に存在する場合はメモリが無駄です – Dravidian
ありがとうございますが、私はjsonツリーを再構築して別のメソッドに移りました。私の現在のモデルはあまりにも面倒だったと思います。 –