2017-12-18 9 views
1

新しいval/varを作成せずに、3番目のレイヤーから2番目のレイヤー "it"をどのように参照しますか?私はあなたがval mydata = itとmydata.id.toString()を行うことができることを知っています。私はちょうど私がより高いレベルからそれを参照させることができるKotlinの何かがあるのだろうか?Kotlin複数レイヤー参照

data.arrayresults.forEach { 
    val result = it 

    result.myData.let { 
     val itemView - inflater.inflate(R.layout.somelayout) 

     itemView.setOnClickListener(View.OnClickListener { 

      // the it references the view but I want it to reference the result.myData 
      SomeActivity.startActivity(context, it.id.toString()) 
     }) 
    } 
} 
+1

この回答をもとに、私は何を言わないだろう。 https://stackoverflow.com/a/43042442/2259854 – clownba0t

+0

[いいえ、とにかく入れ子にしてはいけません](https://youtu.be/ihdEjDoXOgc?t=17m45s)。 – Moira

答えて

5

いいえ、itシンボルは常に最も内側の暗黙の単一のラムダパラメータを参照します。

これを解決するために、また、コードの可読性を向上させるために、named lambda parametersCoding conventionsで提案されているようにあなたは、パラメータでラムダを入れ子にしているたびに使用します。

data.arrayresults.forEach { result ->  
    result.myData.let { myData -> 
     val itemView - inflater.inflate(R.layout.somelayout) 

     itemView.setOnClickListener(View.OnClickListener { view -> 

      // the it references the view but I want it to reference the result.myData 
      SomeActivity.startActivity(context, myData.id.toString()) 
     }) 
    } 
}