J'ai le code suivant:
public fun findSomeLikeThis(): ArrayList<T>? {
val result = Db4o.objectContainer()!!.queryByExample<T>(this as T) as Collection<T>
if (result == null) return null
return ArrayList(result)
}
Si j'appelle cela comme:
var list : ArrayList<Person>? = p1.findSomeLikeThis()
for (p2 in list) {
p2.delete()
p2.commit()
}
Cela me donnerait l'erreur:
La plage For-loop doit avoir une méthode 'iterator ()'
Est-ce que j'ai râté quelque chose?
Votre ArrayList
est de type nullable. Donc, vous devez résoudre ce problème. Il y a plusieurs options:
for (p2 in list.orEmpty()) { ... }
ou
list?.let {
for (p2 in it) {
}
}
ou vous pouvez simplement retourner une liste vide
public fun findSomeLikeThis(): List<T> //Do you need mutable ArrayList here?
= (Db4o.objectContainer()!!.queryByExample<T>(this as T) as Collection<T>)?.toList().orEmpty()
Je suis également confronté à ce problème lorsque je boucle sur quelque chose, ce n'est pas un tableau.
Exemple
fun maximum(prices: Array<Int>){
val sortedPrices = prices.sort()
for(price in sortedPrices){ // it will display for-loop range must have iterator here (because `prices.sort` don't return Unit not Array)
}
}
C'est un cas différent de cette question mais j'espère que cela vous aidera