Mapbox: Ошибка установки свойства: icon-image [2] Метки ветвей должны быть числами или строками - PullRequest
1 голос
/ 24 марта 2020

Я пытаюсь использовать выражение match () из Mapbox's Android SDK 9.0.0 со списком идентификаторов. Но я получаю следующую ошибку во время выполнения:

"Свойство настройки ошибки: icon-image [2] Метки ветвей должны быть числами или строками."

I кодирую в Kotlin.

Чтобы изолировать суть проблемы, я пытаюсь передать match () массив одного String элемента с помощью оператора arrayOf():

match(get(KEY_ID), literal(arrayOf("134")), appearanceIfSelected, appearanceIfNotSelected)

Приведенный выше код не работает, но выдает ошибку выше. Следующий код, который использовал arrayListOf(), также не удался:

match(get(KEY_ID), literal(arrayListOf(pois!!.first().id)), appearanceIfSelected, appearanceIfNotSelected)

listOf() также не удался:

match(get(KEY_ID), literal(listOf(pois!!.first().id)), appearanceIfSelected, appearanceIfNotSelected)

Свертывание в array() тоже не удалось:

match(get(KEY_ID), array(literal(listOf("134"))), appearanceIfSelected, appearanceIfNotSelected)

Я завернул в literal(), потому что следующее даже не скомпилируется:

match(get(KEY_ID), arrayOf("134"), appearanceIfSelected, appearanceIfNotSelected)

1 Ответ

0 голосов
/ 24 марта 2020

В качестве обходного пути я заменил match() на any() и передал переменное число аргументов, используя Kotlin spread operator "*"

val eqPOIIdExpressions = arrayOf(eq(get(KEY_ID), "134"))

// The * operator below converts the Array<Expression> into varargs for any
// see https://proandroiddev.com/kotlins-vararg-and-spread-operator-4200c07d65e1

switchCase(
    any(*eqPOIIdExpressions), appearanceIfSelected,
    appearanceIfNotSelected
)

Один раз Я получил это работает, я пошел дальше и добавил все элементы массива:

val eqPOIIdExpressions = pois!!.map {
    eq(get(KEY_ID), it.id)
}.toTypedArray()
...