Построение предиката (NSExpression) для определения цвета значка для слоя Mapbox SymbolStyle - PullRequest
0 голосов
/ 19 ноября 2018

Я недавно начал работать с 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 Ответ

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

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

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

СТОРОННОЕ ПРИМЕЧАНИЕ: я пробовал только составлять троичные операторы и оценивать объект, а не это конкретное выражение.

...