如何使用Kotlin遍历类组件

时间:2019-08-06 16:21:25

标签: java android kotlin

我正面临这个问题,我已经进行了一些搜索,但是没有找到答案。

我想做什么?

我正在使用翻新从API中获取一些数据,我可以获取数据,但是我想在类中进行ForEach来查找所需的属性。

    data class ChampionList(
            @SerializedName("version")
        val version : String,
        @SerializedName("data")
        val data : Data) <------ wanna do the foreach in this property  

我想这样做,或者像这样:(这里我得到以下错误= for循环范围必须具有'iterator()'方法)

      for(dataChampion in ChampionList.Data){
            //do something
    }

当我搜索时,我发现了一些有关Kotlin反射的信息,但我听不懂:(

我发现但没有用的另一件事是使用它:

 for(data in ChampionList::class.memberProperties){
   //access data here, but got an unresolved reference for member properties
}

classes:


    data class ChampionList(
        @SerializedName("version")
        val version : String,
        @SerializedName("data")
        val data : Data)



    data class Data (
        @SerializedName("Aatrox") val aatrox : Aatrox,
        @SerializedName("Ahri") val ahri : Ahri,
        @SerializedName("Akali") val akali : Akali,
        @SerializedName("Alistar") val alistar : Alistar,
        @SerializedName("Amumu") val amumu : Amumu,
        @SerializedName("Anivia") val anivia : Anivia
    }


    data class Aatrox(

        @SerializedName("version") val version: String,
        @SerializedName("id") val id: String,
        @SerializedName("key") val key: Int,
        @SerializedName("name") val name: String,
        @SerializedName("title") val title: String,
        @SerializedName("blurb") val blurb: String,
        @SerializedName("info") val info: Info,
        @SerializedName("image") val image: Image,
        @SerializedName("tags") val tags: List<String>,
        @SerializedName("partype") val partype: String,
        @SerializedName("stats") val stats: Stats
    )

所有其他类别,例如Ahri,Akali,Alistar,Amumu和Anivia与Aatrox相同

2 个答案:

答案 0 :(得分:1)

for(data in ChampionList::class.memberProperties){
    //access data here, but got an unresolved reference for member properties
}

是正确的方法(如果您在类中没有声明任何属性并且不关心顺序),但是您需要

  1. 如果尚未添加kotlin-reflect依赖项,如here(对于Gradle所述):

    implementation "org.jetbrains.kotlin:kotlin-reflect"
    
  2. 添加import kotlin.reflect.full.memberProperties;

  3. 如果您确实关心顺序或不在类中包含属性,请改用ChampionList::class.primaryConstructor.valueParameters

答案 1 :(得分:0)

尝试这样的事情:

for (dataChampion in data.orEmpty()) { 
    //do something
 }

或者这个:

 data?.let {
    for (dataChampion in it) {

    }
}

我的猜测是您正在尝试遍历可为空的数据类型,希望这对您有用。英雄联盟应用程序上的好运:)