Android - Kotlin Infix не работает на функцию расширения одного параметра - PullRequest
0 голосов
/ 27 апреля 2019

взгляните на эту простую функцию расширения, у меня есть инфикс:

infix fun View.isValidColor(hexColor: String?): Boolean {
    var isValid = true
    return hexColor?.let {
        try {
            Color.parseColor(it)
        } catch (e: Throwable) {
            isValid = false
        }
        isValid
    } ?: false
}

//notice how i have infix the extension meaning brackets are not needed, hopefully making it easier to read.  

Теперь давайте посмотрим на использование и то, что я пробовал:

enter image description here

он не является инфиксом и следует правилу для инфикса , что:

  1. Должны быть функциями-членами или расширениями.
  2. У них должен быть один параметр.
  3. Параметр не должен принимать переменное количество аргументов и не должен иметь значения по умолчанию.

что я делаю не так?

UPDATE:
Я также пытался это, но он работает, явно вызывая ссылающийся класс: enter image description here

, так как теперь я использую явный объект, почему он не работает? ivLogo - это синтетика ImageView от kotlin.

1 Ответ

2 голосов
/ 27 апреля 2019

Для работы функции infix слева от нее должен быть размещен фактический экземпляр объекта:

val result = someView isValidColor "#FFFFFF"
...