func foo(x: T) -> Int? { switch x { case let int as Int: return x + 1 case let str as String: return str.toInt().map { $0 + 1 } case let doub as Double: return Int(doub) default: return nil } }