Conditional Downcasting Operator
🚧 Status: The conditional downcasting operator
as?
is implemented, but it only supports values that have the typeAnyStruct
andAnyResource
.
The conditional downcasting operator as?
can be used to type cast a value to a type. The operator returns an optional. If the value has a type that is a subtype of the given type that should be casted to, the operator returns the value as the given type, otherwise the result is nil
.
The cast and check is performed at run-time, i.e. when the program is executed, not statically, i.e. when the program is checked.
// Declare a constant named `something` which has type `AnyStruct`,
// with an initial value which has type `Int`.
//
let something: AnyStruct = 1
// Conditionally downcast the value of `something` to `Int`.
// The cast succeeds, because the value has type `Int`.
//
let number = something as? Int
// `number` is `1` and has type `Int?`
// Conditionally downcast the value of `something` to `Bool`.
// The cast fails, because the value has type `Int`,
// and `Bool` is not a subtype of `Int`.
//
let boolean = something as? Bool
// `boolean` is `nil` and has type `Bool?`
Downcasting works for nested types (e.g. arrays), interfaces (if a resource interface not to a concrete resource), and optionals.
// Declare a constant named `values` which has type `[AnyStruct]`,
// i.e. an array of arbitrarily typed values.
//
let values: [AnyStruct] = [1, true]
let first = values[0] as? Int
// `first` is `1` and has type `Int?`
let second = values[1] as? Bool
// `second` is `true` and has type `Bool?`
Last updated
Was this helpful?