The “Swifty” way of doing such a thing is to have the types you care about 
conform to a protocol that clearly defines the API you’re trying to expose. For 
example:

protocol Fooable {
        func doFoo()
}

extension Int: Fooable {
        func doFoo() {
                print("I’m an Int")
        }
}

extension String: Fooable {
        func doFoo() {
                print("I’m a String")
        }
}

Now, instead of a disjunctive Int | String union type you can just use Fooable 
and call doFoo on it when necessary:

func doSomethingWithAFooable(_ foo: Fooable) {
        foo.doFoo()
}

doSomethingWithAFooable(0) // prints: I’m an Int
doSomethingWithAFooable("") // prints: I’m a String

Saagar Jha

> On Jan 13, 2018, at 01:45, Daryle Walker via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> From 
> <https://github.com/apple/swift-evolution/blob/master/commonly_proposed.md#miscellaneous
>  
> <https://github.com/apple/swift-evolution/blob/master/commonly_proposed.md#miscellaneous>>.
> 
> Maybe I’m not up on my Type Theory, but why should type constraint 
> disjunctions be banned?
> 
> — 
> Daryle Walker
> Mac, Internet, and Video Game Junkie
> darylew AT mac DOT com 
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to