ios - 构建谓词(NSExpression)以确定 Mapbox SymbolStyle 图层的图标颜色
问题描述
我最近开始在 iOS 上使用 Mapbox SDK,并且我有一些标记要添加到我的地图中。每个标记代表一个具有多个属性的对象,其中包括:类型属性(返回到枚举)和布尔属性。我有一个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 Predicates and Expressions Reference文档,但我仍然不清楚如何在NSExpression
. 谁能告诉我这是否可以做到,如果可以,怎么做?
解决方案
根据我的尝试:
NSExpression(format: "TERNARY(booleanProperty=YES, %@, MGL_MATCH(type, 'type1', %@, 'type2', %@, 'type3', %@, %@))", UIColor.red, UIColor.orange, UIColor.purple, UIColor.yellow, defaultColor)
旁注:我只尝试合成三元运算符并评估对象,而不是这个特定的表达式。
推荐阅读
- python - 令牌与 Python 机密库发生冲突的可能性有多大?
- r - 在 R 中导入在第一个物理列中具有列名的文件
- css - CSS 响应性,高度不等的内联 div
- django-templates - 如何在 django 2.2 的多个应用程序中使用其静态文件管理多个模板?
- java - 如何确定最适合场景的设计模式
- asp.net-core - ASP.NET Core 3.0 中的本地化
- encoding - Firebird 编码/解码 base64
- java - 为什么模糊图像的拉普拉斯分数方差更好?
- javascript - Material-UI 抽屉四舍五入留下空白
- android - Android LocationManager getLatitude() 和 getLongitude() 小数位数