Вы должны использовать this
. it
называется сокращением, если в лямбдах есть только один параметр.
context?.let {
it.resources.getInt(R.int.anyint) // just for example
}
В приведенном выше фрагменте it
- сокращение для параметра lamda (в случае только одного параметра).
context?.let { cxt -> // here we have manually defined a parameter
cxt.resources.getInt(R.int.anyint) // just for an example
}
В этом фрагменте вместо it
мы создали cxt
, который в точности совпадает с it
.
На самом деле вы неправильно понимаете концепцию функции расширения.
Вы создаете класс данных ScreenDef
и хотите создать для него функцию расширения, почему? Если вы действительно хотите иметь функцию-член, просто создайте нормальный класс и добавьте в него функцию.
Функция расширения должна создаваться, когда целевой класс не поддерживается вами. Например: активность, фрагменты не поддерживаются вами, и если вы хотите добавить пользовательскую функцию, вы должны расширить их и сделать это. Таким образом, чтобы предотвратить это, функция расширения входит в картину, и они действительно удобны, поэтому мы любим это.
Вы можете поспорить, что не так с созданием функции расширения для созданного нами класса. Это может или не может быть правдой. Это на самом деле зависит.
Давайте рассмотрим пример. Предположим, мы разработали библиотеку для рисования простых символов на холсте, и мы создали несколько функций. Оказалось, что это настолько хорошо, что люди используют его, мы решили создать расширенную версию, которая может рисовать более сложные символы, которые требуют использования нашей уже разработанной простой библиотеки. Поэтому, когда мы расширяем классы простых библиотек, нам может потребоваться некоторая функциональность для улучшения чего-либо и т. Д. В этом случае, если мы импортировали нашу простую библиотеку в качестве зависимости, тогда было бы полезно создать функцию расширения, в противном случае нам пришлось бы создать еще одного дочернего элемента этой библиотеки. Класс и создать желаемую функцию. Если мы импортируем нашу библиотеку как исходный код, мы можем просто перейти к исходному коду и создать внутри него функцию.
Надеюсь, это поможет.