So I have a method that has 3 different types of arguments that could come in:
Int32
, Int
and Double
. So the idea was to use
Just for purposes of syntactical illustration, here's an example of making this a generic and arriving at a Double for all three types:
func f(_ i: T) {
var d = 0.0
switch i {
case let ii as Int:
d = Double(ii)
case let ii as Int32:
d = Double(ii)
case let ii as Double:
d = ii
default:
fatalError("oops")
}
print(d)
}
But whether this is better than overloading is a matter of opinion. In my view, overloading is far better, because with the generic we are letting a bunch of unwanted types in the door. The Numeric contract is a lie. A triple set of overloads for Double, Int, and Int32 would turn the compiler into a source of truth.