Как ссылаться на это на forEach в Котлине - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть следующий случай

someThing.forEach{
    someWidget.setOnClickListener{
        //it is an View
        //I need foreach it of someObject
    }
}

Я прочитал этот ответ, но он не работает

kotlin, как ссылаться на внешний вид в многослойных функциях применения

Ответы [ 3 ]

0 голосов
/ 13 ноября 2018

Я думаю, вы имеете в виду что-то вроде этого:

someThing.forEach{ x->
    someWidget.setOnClickListener{
        //use x
        //I need foreach it of someObject
    }
}

просто используйте другое имя, например x, вам не нужно использовать it.
Вот пример:

val a = mutableListOf<Int>(1, 3)
val b = mutableListOf<Int>(2, 4)

a.forEach { x ->
    b.forEach {
        println("" + x + " " + it)
    }
}

здесь x - это каждый элемент из списка a
и it - это каждый элемент из списка b

0 голосов
/ 13 ноября 2018

Проблема в том, что здесь вы не имеете дело с this.

forEach имеет параметр, и для простоты вы можете оставить его и использовать вместо него it.Не использовать его - это то же самое, что использовать _ -> вместо этого ... вы просто отбрасываете его.

Итак, ваш пример написан с именованными лямбда-параметрами:

someThing.forEach{ some -> // 'it' was available here too, but will not be accessible from within the next setOnClickListener...
  someWidget.setOnClickListener{
    // some contains one of the someThings now and 'it' is still your View
  }
}
0 голосов
/ 13 ноября 2018

Вы можете назвать переменную в forEach.

things.forEach { thing ->
    someWidget.setOnClickListener {
        thing.doSomething()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...