Desidero utilizzare i valori di un dizionario nel mio UITableViewCells. Posso ottenere quelli da un dizionario usando indexPath.row per il valore e indexPath.section per la chiave?Swift: accesso al dizionario tramite indice
risposta
è possibile ottenere la matrice di chiavi e ottenere la chiave a indexPath.section
come questo:
Array(yourDictionary.keys)[indexPath.section]
e si può ottenere il valore indexPath.row
dalla matrice valori in questo modo:
Array(yourDictionary.values)[indexPath.row]
Edit:
se si desidera ottenere i valori di una chiave di sezione specifica, è necessario scrivere:
let key = Array(yourDictionary.keys)[indexPath.section]
let array = yourDictionary[key]
let value = array[indexPath.row]
I dizionari sono intrinsecamente non ordinati. Se usi dictionary.keys, puoi ottenere una serie di chiavi e usarle, come dice @Firas nella sua risposta, ma non è garantito che la prossima volta che recupererai un array di chiavi saranno nello stesso ordine.
Un'altra opzione consiste nell'utilizzare Int come tipo di chiave, quindi utilizzare indexPath.row come chiave.
È molto meglio utilizzare un array come origine dati per una vista tabella.
Se si desidera memorizzare i valori per una vista tabella sezionata in un dizionario, è necessario utilizzare un array di sezione esterna, che contiene una matrice di righe interne, che contiene un dizionario di valori per la cella.
Ecco il mio piccolo trucco per accedere al dizionario per indice. Basta avvolgere il dizionario!
var dict = [String: [Int]]()
dict.updateValue([1, 2, 3], forKey: "firstKey")
dict.updateValue([3, 4, 5], forKey: "secondKey")
var keyIndex = ["firstKey": "firstKey", "secondKey": "secondKey"]
var arr = [[String: [Int]]]()
for (key, value) in dict {
arr.append([keyIndex[key]!: value])
}
print(arr[0]) // ["firstKey": [1, 2, 3]]
Grazie! Ho dimenticato di menzionare, mi spiace, che il dizionario di cui sto parlando assomiglia a questo: [String: [AnyObject]]() Quindi ho più oggetti per chiave. È possibile avere una matrice per i valori di una chiave specifica? – Vincent
@Vincent si certo, aggiornerò la mia risposta. – Firas
Grazie! Questo ha funzionato! – Vincent