Построение предиката (NSExpression) для определения цвета значка для слоя Mapbox SymbolStyle

Недавно я начал работать с Mapbox SDK для iOS, и у меня есть несколько маркеров, которые я хочу добавить на свою карту. Каждый маркер представляет объект, имеющий несколько свойств, среди которых: свойство типа (которое возвращается к перечислению) и логическое свойство. у меня есть MGLSymbolStyleLayer определены, и я установил большинство связанных с иконками свойств соответственно. В настоящее время я устанавливаю цвет значка, основываясь исключительно на "типе" объекта:

let defaultColor = UIColor.blue
layer.iconColor = NSExpression(format: "MGL_MATCH(type, 'type1', %@, 'type2', %@, 'type3', %@, %@)", UIColor.orange, UIColor.purple, UIColor.yellow, defaultColor)

Это работает хорошо, но теперь мне нужно добавить дополнительную часть логики в NSExpression проверить логическое свойство каждого объекта и, если оно истинно, установить красный цвет значка; иначе, определите цвет значка для каждого объекта на основе его типа (используя логику, определенную выше). Итак, в двух словах, мне нужно NSExpression который функционирует так:

if feature.booleanProperty == true {
   // set icon color to red
} else {
   // set icon color based on the feature type
}

Я просмотрел справочный документ по Предикатам и Выражениям Mapbox, но мне все еще не ясно, как бы я реализовал этот вид условной логики в NSExpression, Может кто-нибудь сказать мне, если это возможно, и если да, то как?

1 ответ

Решение

Из того, что я попробовал:

NSExpression(format: "TERNARY(booleanProperty=YES, %@, MGL_MATCH(type, 'type1', %@, 'type2', %@, 'type3', %@, %@))", UIColor.red, UIColor.orange, UIColor.purple, UIColor.yellow, defaultColor)

Боковое примечание: я пытался только составлять троичные операторы и оценивать объект, а не это конкретное выражение.

Другие вопросы по тегам