代码之家  ›  专栏  ›  技术社区  ›  Serge Maslyakov

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

  •  1
  • Serge Maslyakov  · 技术社区  · 6 年前

    我正在尝试从 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 回复  |  直到 6 年前
        1
  •  3
  •   Minh Nguyễn jmkiley    6 年前

    Identity 插值模式将要素属性的值用作样式值。因此,应该不需要stops字典。在您概述的示例中,看起来它使用了 imageId

    具有 NSExpression ,您可能想试试 layer.iconImageName = NSExpression(forKeyPath: "imageId")

    如果您希望考虑stops字典,您可以考虑使用 MGL_MATCH ,它接受一个初始条件,然后是该键的可能匹配项,以及如果存在匹配项,则要分配给图层特性的相应值。最后一个参数可以是默认样式值,如果指定的值均不匹配,则将使用该值。

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

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