# Other Protocols

The following protocols are available globally.

- `MGLCluster`

  A protocol that feature subclasses (i.e. those already conforming to the `MGLFeature` protocol) conform to if they represent clusters.

  Currently the only class that conforms to `MGLCluster` is `MGLPointFeatureCluster` (a subclass of `MGLPointFeature`).

  To check if a feature is a cluster, check conformity to `MGLCluster`, for example:

      let shape = try! MGLShape(data: clusterShapeData, encoding: String.Encoding.utf8.rawValue)

      guard let pointFeature = shape as? MGLPointFeature else {
          throw ExampleError.unexpectedFeatureType
      }

      // Check for cluster conformance
      guard let cluster = pointFeature as? MGLCluster else {
          throw ExampleError.featureIsNotACluster
      }

      // Currently the only supported class that conforms to `MGLCluster` is
      // `MGLPointFeatureCluster`
      guard cluster is MGLPointFeatureCluster else {
          throw ExampleError.unexpectedFeatureType
      }

  See more

  #### Declaration

  Objective-C

      @protocol MGLCluster <MGLFeature>

  Swift

      protocol MGLCluster

  View Source on GitHub

- `MGLComputedShapeSourceDataSource`

  Data source for `MGLComputedShapeSource`. This protocol defines two optional methods for fetching data, one based on tile coordinates, and one based on a bounding box. Classes that implement this protocol must implement one, and only one of the methods. Methods on this protocol will not be called on main thread, they will be called on the caller’s `requestQueue`.

  See more

  #### Declaration

  Objective-C

      @protocol MGLComputedShapeSourceDataSource <NSObject>

  Swift

      protocol MGLComputedShapeSourceDataSource : NSObjectProtocol

  View Source on GitHub

- `MGLOfflineStorageDelegate`

  The `MGLOfflineStorageDelegate` protocol defines methods that a delegate of an `MGLOfflineStorage` object can optionally implement to transform various types of URLs before downloading them via the internet.

  See more

  #### Declaration

  Objective-C

      @protocol MGLOfflineStorageDelegate <NSObject>

  Swift

      protocol MGLOfflineStorageDelegate : NSObjectProtocol

  View Source on GitHub