class A { func foo() { } } class B <T> : A { override func foo(x: Any) { if let t = cast(x, T.self) { ... } } } func f(a: A) { a.foo() }