# NSExpression(MGLAdditions)

    @interface NSExpression (MGLAdditions)

Methods for creating expressions that use Mapbox-specific functionality and for converting to and from the JSON format defined in the Mapbox Style Specification.

### Creating Variable Expressions

- `zoomLevelVariableExpression`

  `NSExpression` variable that corresponds to the `zoom` expression operator in the Mapbox Style Specification.

  #### Declaration

  Objective-C

      @property (readonly, nonatomic, class)
          NSExpression *_Nonnull zoomLevelVariableExpression;

  Swift

      class var zoomLevelVariable: NSExpression { get }

  View Source on GitHub
- `heatmapDensityVariableExpression`

  `NSExpression` variable that corresponds to the `heatmap-density` expression operator in the Mapbox Style Specification.

  #### Declaration

  Objective-C

      @property (readonly, nonatomic, class)
          NSExpression *_Nonnull heatmapDensityVariableExpression;

  Swift

      class var heatmapDensityVariable: NSExpression { get }

  View Source on GitHub
- `lineProgressVariableExpression`

  `NSExpression` variable that corresponds to the `line-progress` expression operator in the Mapbox Style Specification.

  #### Declaration

  Objective-C

      @property (readonly, nonatomic, class)
          NSExpression *_Nonnull lineProgressVariableExpression;

  Swift

      class var lineProgressVariable: NSExpression { get }

  View Source on GitHub
- `geometryTypeVariableExpression`

  `NSExpression` variable that corresponds to the `geometry-type` expression operator in the Mapbox Style Specification.

  #### Declaration

  Objective-C

      @property (readonly, nonatomic, class)
          NSExpression *_Nonnull geometryTypeVariableExpression;

  Swift

      class var geometryTypeVariable: NSExpression { get }

  View Source on GitHub
- `featureIdentifierVariableExpression`

  `NSExpression` variable that corresponds to the `id` expression operator in the Mapbox Style Specification.

  #### Declaration

  Objective-C

      @property (readonly, nonatomic, class)
          NSExpression *_Nonnull featureIdentifierVariableExpression;

  Swift

      class var featureIdentifierVariable: NSExpression { get }

  View Source on GitHub
- `featureAttributesVariableExpression`

  `NSExpression` variable that corresponds to the `properties` expression operator in the Mapbox Style Specification.

  #### Declaration

  Objective-C

      @property (readonly, nonatomic, class)
          NSExpression *_Nonnull featureAttributesVariableExpression;

  Swift

      class var featureAttributesVariable: NSExpression { get }

  View Source on GitHub

### Creating Conditional Expressions

- `+mgl_expressionForConditional:trueExpression:falseExpresssion:`

  Returns a conditional function expression specifying the string predicate, and expressions for each condition.

  #### Declaration

  Objective-C

      + (nonnull instancetype)
      mgl_expressionForConditional:(nonnull NSPredicate *)conditionPredicate
                    trueExpression:(nonnull NSExpression *)trueExpression
                  falseExpresssion:(nonnull NSExpression *)falseExpression;

  Swift

      convenience init(forMGLConditional conditionPredicate: NSPredicate, trueExpression: NSExpression, falseExpression: NSExpression)

  #### Parameters

  `conditionPredicate` | The predicate to get evaluated.
  `trueExpression` | The expression for conditions equal to true.
  `falseExpression` | The expression for conditions equal to false.

  View Source on GitHub

### Creating Ramp, Scale, and Curve Expressions

- `+mgl_expressionForSteppingExpression:fromExpression:stops:`

  Returns a step function expression specifying the stepping, from expression and stops.

  #### Related examples

  See the Data-driven circles, Cluster point data, and Use images to cluster point data examples to learn how to use this expression to style a map layer based on an attribute value.

  #### Declaration

  Objective-C

      + (nonnull instancetype)
      mgl_expressionForSteppingExpression:(nonnull NSExpression *)steppingExpression
                           fromExpression:(nonnull NSExpression *)minimumExpression
                                    stops:(nonnull NSExpression *)stops;

  Swift

      convenience init(forMGLStepping steppingExpression: NSExpression, from minimumExpression: NSExpression, stops: NSExpression)

  #### Parameters

  `steppingExpression` | The stepping expression.
  `minimumExpression` | The expression which could be a constant or function expression.
  `stops` | The stops must be an `NSDictionary` constant `NSExpression`.

  View Source on GitHub
- `+mgl_expressionForInterpolatingExpression:withCurveType:parameters:stops:`

  Returns an interpolated function expression specifying the function operator, curve type, parameters and steps.

  #### Related examples

  See the Create a heatmap layer example to learn how to style an `MGLHeatmapStyleLayer` based on zoom level and point density with this expression.

  #### Declaration

  Objective-C

      + (nonnull instancetype)
      mgl_expressionForInterpolatingExpression:(nonnull NSExpression *)inputExpression
                                 withCurveType:
                                     (nonnull MGLExpressionInterpolationMode)curveType
                                    parameters:(nullable NSExpression *)parameters
                                         stops:(nonnull NSExpression *)stops;

  Swift

      convenience init(forMGLInterpolating inputExpression: NSExpression, curveType: MGLExpressionInterpolationMode, parameters: NSExpression?, stops: NSExpression)

  #### Parameters

  `inputExpression` | The interpolating expression input.
  `curveType` | The curve type could be `MGLExpressionInterpolationModeLinear`, `MGLExpressionInterpolationModeExponential` and `MGLExpressionInterpolationModeCubicBezier`.
  `parameters` | The parameters expression.
  `stops` | The stops expression.

  View Source on GitHub
- `+mgl_expressionForMatchingExpression:inDictionary:defaultExpression:`

  Returns a match function expression specifying the input, matching values, and default value.

  #### Declaration

  Objective-C

      + (nonnull instancetype)
      mgl_expressionForMatchingExpression:(nonnull NSExpression *)inputExpression
                             inDictionary:
                                 (nonnull NSDictionary<NSExpression *, NSExpression *>
                                      *)matchedExpressions
                        defaultExpression:(nonnull NSExpression *)defaultExpression;

  Swift

      convenience init(forMGLMatchingKey inputExpression: NSExpression, in matchedExpressions: [NSExpression : NSExpression], default defaultExpression: NSExpression)

  #### Parameters

  `inputExpression` | The matching expression.
  `matchedExpressions` | The matched values expression dictionary must be condition : value.
  `defaultExpression` | The defaultValue expression to be used in case there is no match.

  View Source on GitHub

### Concatenating String Expressions

- `-mgl_expressionByAppendingExpression:`

  Returns a constant expression appending the passed expression.

  Note

  Both the receiver and the given expression must be an `NSString` constant expression type; otherwise, an exception is rised.

  #### Declaration

  Objective-C

      - (nonnull instancetype)mgl_expressionByAppendingExpression:
          (nonnull NSExpression *)expression;

  Swift

      func mgl_appending(_ expression: NSExpression) -> Self

  #### Parameters

  `expression` | The expression to append to the receiver.

  View Source on GitHub

### Converting JSON Expressions

- `+expressionWithMGLJSONObject:`

  Returns an expression equivalent to the given Foundation object deserialized from JSON data.

  The Foundation object is interpreted according to the Mapbox Style Specification. See the “Information for Style Authors” guide for a correspondence of operators and types between the style specification and the `NSExpression` representation used by this SDK.

  #### Declaration

  Objective-C

      + (nonnull instancetype)expressionWithMGLJSONObject:(nonnull id)object;

  Swift

      convenience init(mglJSONObject object: Any)

  #### Parameters

  `object` | A Foundation object deserialized from JSON data, for example using `NSJSONSerialization`.

  #### Return Value

  An initialized expression equivalent to `object`, suitable for use as the value of a style layer attribute.

  View Source on GitHub
- `mgl_jsonExpressionObject`

  An equivalent Foundation object that can be serialized as JSON.

  The Foundation object conforms to the Mapbox Style Specification. See the “Information for Style Authors” guide for a correspondence of operators and types between the style specification and the `NSExpression` representation used by this SDK.

  You can use `NSJSONSerialization` to serialize the Foundation object as data to write to a file.

  #### Declaration

  Objective-C

      @property (readonly, nonatomic) id _Nonnull mgl_jsonExpressionObject;

  Swift

      var mgl_jsonExpressionObject: Any { get }

  View Source on GitHub

### Localizing the Expression

- `-mgl_expressionLocalizedIntoLocale:`

  Returns a copy of the receiver localized into the given locale.

  This method assumes the receiver refers to the feature attributes that are available in vector tiles supplied by the Mapbox Streets source. On iOS, the user can set the system’s preferred language in Settings, General Settings, Language & Region. On macOS, the user can set the system’s preferred language in the Language & Region pane of System Preferences.

  #### Declaration

  Objective-C

      - (nonnull NSExpression *)mgl_expressionLocalizedIntoLocale:
          (nullable NSLocale *)locale;

  Swift

      func mgl_expressionLocalized(into locale: Locale?) -> NSExpression

  #### Parameters

  `locale` | The locale into which labels should be localized. To use the system’s preferred language, if supported, specify `nil`. To use the local language, specify a locale with the identifier `mul`.

  View Source on GitHub