Mapbox iOS: MGL_IF 表达式

Mapbox iOS: MGL_IF Expression

我想根据多个 if 条件为我的 MGLSymbolStyleLayer 功能图标着色,这需要使用 MGL_IF,但我收到此运行时错误:'Unable to parse the format string...'

projectsLayer!.iconColor =
          NSExpression(format: "MGL_IF(location_name IN %@, %@, location_name = United States,  %@)",
                       uniqueLocations, savedColor, defaultColor)

请注意,对于像这样简单的事情,我可以使用三元运算符,这对我来说效果很好。但是我需要为多种颜色添加多个条件,所以我需要使用 MGL_IF 或类似的东西。

Apple 的 iOS/macOS SDK 的变化引起的 regression in the Maps SDK 似乎导致了 MGL_IF 的这种行为。作为解决方法,您可以使用 TERNARY() 或 MGL_MATCH() 运算符,如下所述:

TERNARY() 只支持单例。 (MGL_IF 与 TERNARY 没有区别,也不是必需的。)对于多种情况,您需要嵌套 TERNARY(foo = bar, 'A', TERNARY(bar = baz, 'B', 'C')):

coloredLayer.fillColor = NSExpression(format: "TERNARY(location_name = 'United States', %@, TERNARY(location_name = 'Russia', %@,))", UIColor.white, UIColor.green, UIColor.magenta)

或使用MGL_MATCH():

coloredLayer.fillColor = NSExpression(format: "MGL_MATCH(location_name, 'United States', %@, 'Russia', %@, 'Brazil', %@, 'Venezuela', %@, %@)", UIColor.white, UIColor.lightGray, UIColor.purple, UIColor.systemTeal, UIColor.yellow)

这将导致美国被涂上颜色,而俄罗斯被涂成浅灰色,巴西被涂成紫色,委内瑞拉被涂成蓝绿色,其他所有东西都被涂成黄色。