Ваш следующий код
for ((i, v) in mlist.withIndex()) {...
равен
for (item in mlist.withIndex()) {
val i: Int = item.component1() //it is index in your list
val v: TestData = item.component2()
...
Если вы хотите получить только TestData
элементов, удалите withIndex
call
for (item in mlist) {
val i: String = item.component1()
val v: Int = item.component2()
...
Чтобы это сработало, ваш класс должен иметь operator fun
для упомянутого componentN
.Ваш класс TestData
имеет его, потому что вы пометили его как data class
.
И давайте вернемся к строке кода, которая вас смущает
println(i.toString() + " ok " + v.i + " " + v.component2())
Как мы уже знаем- v: TestData
.Итак, i
здесь верно, что вы упомянули в основном конструкторе с ключевым словом var
.
private data class TestData(var i: String, var j: Int)
Также его можно пометить как val
- в вашем случае это не имеет смысла, нотогда вы просто не сможете редактировать это значение свойства ( здесь вы можете прочитать о конструкторах).
private class TestData(i: String, j: Int) //this won't work in your case