swiftの関数で異なる引数の型を異なる型で戻り値にする場合のアドバイスお願いします

テスト関数(faild func)
func test(num: int or double) -> int or double {
var ret: int or double!

switch (type(of: num)) {
case int:
ret = num * 2
case double:
ret = num * 2.0
default:
ret = nil
}

return(ret)
}