我如何从“MGLConstantStyleValue”迁移到“NSExpression”

How I can migrate from `MGLConstantStyleValue` to `NSExpression`

我正在尝试从 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")

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

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

如果您希望考虑停止字典,您可能需要考虑使用 MGL_MATCH,它采用初始条件,后面是该键的可能匹配项和对应的值如果匹配,则分配给层 属性。最后一个参数可以是默认样式值,如果 none 个指定值匹配则使用该值。

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

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