我如何从`MGLConstantStyleValue`迁移到`NSExpression`

时间:2018-04-20 17:20:26

标签: ios mapbox mapbox-gl swift4.1

我正在尝试从mapbox-sdk-3.7迁移到mapbox-sdk-4.0

我无法理解如何将此语法与MGLConstantStyleValue转换为NSExpression

let layer = style.layer(withIdentifier: "milestones") as? MGLSymbolStyleLayer
let styledValues: [String: MGLStyleValue<NSString>] = ...

layer.iconImageName = MGLConstantStyleValue(interpolationMode: .identity,
                    sourceStops: styledValues,
                    attributeName: "imageId")

1 个答案:

答案 0 :(得分:3)

Identity插值模式使用要素属性的值作为样式值。因此,不需要停止字典。在您概述的情况下,看起来它使用了imageId的值。

使用NSExpression,您可以尝试layer.iconImageName = NSExpression(forKeyPath: "imageId")

如果您希望将停用词典考虑在内,您可能需要考虑使用MGL_MATCH,它采用初始条件,然后是该键的可能匹配项以及要分配给的相应值如果匹配,则为layer属性。最终参数可以是默认样式值,如果没有指定的值匹配,则使用该值。

layer.iconImageName = NSExpression(format: "MGL_MATCH(imageID, 'imageID1', 'nameForImageID1', 'defaultImageName')")

您可能会发现这些指南很有用: