Type Casting Pattern
As the name already implies, this pattern casts or matches types. It has two different keywords:
is
type: Matches the runtime type (or a subclass of it) against the right hand side. This performs a type cast but disregards the returned type. So yourcase
block won't know about the matched type.- pattern
as
type: Performs the same match as theis
pattern but for a successful match casts the type into the pattern specified on the left hand side.
Here is an example of the two.
let a: Any = 5
switch a {
// this fails because a is still Any
// error: binary operator '+' cannot be applied to operands of type 'Any' and 'Int'
case is Int: print (a + 1)
// This works and returns '6'
case let n as Int: print (n + 1)
default: ()
}
Note that there is no pattern
before the is
. It matches directly
against a
.