-
Swift에서는
as?
로 안전하게 type casting을 할 수 있었다.class A {} class B: A {} class C {} let a = A() let b = B() b as? C// nil
-
Dart는
as
keyword로 type casting을 할 수 있지만, incompatible type으로 casting을 시도하면 type error가 발생한다. Dart에는 optional casting 연산자가 따로 없으므로, error 없이 type casting을 하려면 type check를 먼저 해야 한다.class A {} class B extends A {} class C {} final a = A(); final b = B(); a as C // ❗️ type error if (a is C) { a as C // Never executed } if (a is B) { a as B // ✅ OK }
-
매번 type check를 하려면 번거로우므로, 아래와 같은 extension을 만들어서 사용하면 편리하다.
extension SafeTypeCast on Object? { T? asOrNull<T>() { var self = this; return self is T ? self : null; } } a.asOrNull<B>();// OK