Построение предиката (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)
Боковое примечание: я пытался только составлять троичные операторы и оценивать объект, а не это конкретное выражение.