---
title: Dimension
framework: foundation
role: symbol
role_heading: Class
path: foundation/dimension
---

# Dimension

An abstract class representing a dimensional unit of measure.

## Declaration

```swift
class Dimension
```

## Overview

Overview The Foundation framework provides concrete subclasses for many of the most common types of physical units. Table 1: Dimension subclasses.  |  |   |  |   |  |   |  |   |  |   |  |   |  |   |  |   |  |   |  |   |  |   |  |   |  |   |  |   |  |   |  |   |  |   |  |   |  |   |  |   |  |   |  |   |  |  Each instance of a Dimension subclass has a converter, which represents the unit in terms of the dimension’s baseUnit(). For example, the NSLengthUnit class uses meters as its base unit. The system defines the predefined miles unit by a UnitConverterLinear with a coefficient of 1609.34, which corresponds to the conversion ratio of miles to meters (1 mi = 1609.34 m); the system defines the predefined meters unit by a UnitConverterLinear with a coefficient of 1.0 because it’s the base unit. You typically use an NSDimension subclass in conjunction with the NSMeasurement class to represent specific quantities of a particular unit. Working with Custom Units In addition to the Apple-provided units, you can define custom units. You can initialize custom units from a symbol and converter of an existing type or implemented as a class method of an existing type for additional convenience. You can also define your own NSDimension subclass to represent an entirely new unit dimension. Initializing a Custom Unit with a Specified Symbol and Definition The simplest way to define a custom unit is to create a new instance of an existing NSDimension subclass using the init(symbol:converter:) method. For example, the smoot is a nonstandard unit of length (1 smoot = 1.70180 m). You can create a new instance of UnitLength as follows: Extending Existing Dimension Subclasses Alternatively, if you use a custom unit extensively throughout an app, consider extending the corresponding Dimension subclass and adding a static variable. For example, a measurement of speed can be furlongs per fortnight (1 fur/ftn = 201.168 m / 1,209,600 s). If an app makes frequent use of this unit, you can extend UnitSpeed to add a furlongsPerFortnight static variable for convenient access as follows: Creating a Custom Dimension Subclass You can create a new subclass of Dimension to describe a new unit dimension. For example, the Foundation framework doesn’t define any units for radioactivity. Radioactivity is the process by which the nucleus of an atom emits radiation. The SI unit of measure for radioactivity is the becquerel (Bq), which is the quantity of radioactive material in which one nucleus decays per second (1 Bq = 1 s-1). Radioactivity is also commonly described in terms of curies (Ci), a unit defined relative to the decay of one gram of the radium-226 isotope (1 Ci = 3.7 × 1010 Bq). You can implement a CustomUnitRadioactivity class that defines both units of radioactivity as follows: Subclassing Notes The system provides Dimension for subclassing. Although the subclasses listed in Table 1 above are suitable for most purposes, you may want to define a custom unit type. For instance, you may need a custom unit type to represent a derived unit, such as magnetic flux (measured as the product of electric potential difference and time). To represent dimensionless units, subclass Unit directly. Methods to Override All subclasses must fully implement the baseUnit() method designating the base unit, relative to which you define any additional units. You must also implement a class method named for the base unit itself, to use interchangeably. For example, the UnitIlluminance class defines its baseUnit() in terms of the lux (lx) and provides a corresponding lux class method. Alternatives to Subclassing As described in Working with Custom Units, you need to create a custom subclass of Dimension only if you or the system haven’t defined a unit of the desired dimension. You can define a custom unit for an existing Dimension subclass by either calling the init(symbol:converter:) method or extending the subclass and adding a corresponding class method.

## Topics

### Creating Dimensions

- [init(symbol:converter:)](foundation/dimension/init(symbol:converter:).md)

### Accessing the Unit Converter

- [converter](foundation/dimension/converter.md)

### Accessing the Base Unit

- [baseUnit()](foundation/dimension/baseunit().md)

### Initializers

- [init(forLocale:)](foundation/dimension/init(forlocale:).md)

## Relationships

### Inherits From

- [Unit](foundation/unit.md)

### Inherited By

- [UnitAcceleration](foundation/unitacceleration.md)
- [UnitAngle](foundation/unitangle.md)
- [UnitArea](foundation/unitarea.md)
- [UnitConcentrationMass](foundation/unitconcentrationmass.md)
- [UnitDispersion](foundation/unitdispersion.md)
- [UnitDuration](foundation/unitduration.md)
- [UnitElectricCharge](foundation/unitelectriccharge.md)
- [UnitElectricCurrent](foundation/unitelectriccurrent.md)
- [UnitElectricPotentialDifference](foundation/unitelectricpotentialdifference.md)
- [UnitElectricResistance](foundation/unitelectricresistance.md)
- [UnitEnergy](foundation/unitenergy.md)
- [UnitFrequency](foundation/unitfrequency.md)
- [UnitFuelEfficiency](foundation/unitfuelefficiency.md)
- [UnitIlluminance](foundation/unitilluminance.md)
- [UnitInformationStorage](foundation/unitinformationstorage.md)
- [UnitLength](foundation/unitlength.md)
- [UnitMass](foundation/unitmass.md)
- [UnitPower](foundation/unitpower.md)
- [UnitPressure](foundation/unitpressure.md)
- [UnitSpeed](foundation/unitspeed.md)
- [UnitTemperature](foundation/unittemperature.md)
- [UnitVolume](foundation/unitvolume.md)

### Conforms To

- [CVarArg](swift/cvararg.md)
- [CustomDebugStringConvertible](swift/customdebugstringconvertible.md)
- [CustomStringConvertible](swift/customstringconvertible.md)
- [Equatable](swift/equatable.md)
- [Hashable](swift/hashable.md)
- [NSCoding](foundation/nscoding.md)
- [NSCopying](foundation/nscopying.md)
- [NSObjectProtocol](objectivec/nsobjectprotocol.md)
- [NSSecureCoding](foundation/nssecurecoding.md)
- [Sendable](swift/sendable.md)
- [SendableMetatype](swift/sendablemetatype.md)

## See Also

### Essentials

- [Measurement](foundation/measurement.md)
- [NSMeasurement](foundation/nsmeasurement.md)
- [Unit](foundation/unit.md)
