개발/Dart

[Dart] Type cast safely

soldev 2024. 7. 20. 20:56

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가 발생한다.

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 B) {
  a as B // OK
}

매번 type check를 해서 casting하기 번거로우므로, 아래와 같은 extension을 만들어서 사용할 수 있다.

extension SafeTypeCast on Object? {
  T? asOrNull<T>() {
    var self = this;
    return self is T ? self : null;
  }
}

a.asOrNull<B>(); // OK

참고