建立谓词(NSExpression)以确定Mapbox SymbolStyle图层的图标颜色

时间:2018-11-19 16:53:24

标签: ios swift mapbox predicate nsexpression

我最近开始在iOS上使用Mapbox SDK,并且有一些要添加到地图中的标记。每个标记代表一个具有多个属性的对象,其中包括:type属性(返回到枚举)和boolean属性。我定义了MGLSymbolStyleLayer,并已相应地设置了大多数与图标相关的属性。目前,我仅根据对象的“类型”来设置图标颜色,如下所示:

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

这很好,但是现在我需要在NSExpression中添加其他逻辑来检查每个对象的布尔属性,如果它是true,则将图标颜色设置为红色;否则,根据对象的类型确定其图标颜色(使用上面定义的逻辑)。简而言之,我需要一个NSExpression,其功能如下:

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

我已经浏览了Mapbox Predicates and Expressions Reference文档,但是我仍然不清楚如何在NSExpression中实现这种条件逻辑。谁能告诉我这样做是否可行,怎么办?

1 个答案:

答案 0 :(得分:2)

根据我的尝试:

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

侧面注意:我只尝试合成三元运算符并评估对象,而不尝试此特定表达式。