[swift-evolution] [Pre-Proposal-Discussion] Union Type - Swift 4

Cao Jiannan frogcjn at 163.com
Wed Aug 10 20:28:39 CDT 2016


Hi all,

I want to make a discussion about union type for swift 4.
See https://github.com/frogcjn/swift-evolution/blob/master/proposals/xxxx-union-type.md <https://github.com/frogcjn/swift-evolution/blob/master/proposals/xxxx-union-type.md>

Add union type grammar, represents the type which is one of other types.

var stringOrURL: String | URL = "https://www.apple.com"
Now, if we using the new union type feature, we can declare type conveniently, No other type declaration, and compiler will automatically calculate the common interface.

func input(value: A | B | C) {
    print(value.commonProperty) // type checker will calculate the common interface, developer just use it out of box
    switch value {
    case let value as A:
        // value is type A
        print(value.propertyInA)
    case let value as B:
        // value is type B
        print(value.propertyInB)
    case let value as C:
        // value is type C
        print(value.propertyInC)
    }
    // there is no default case other than A, B or C. we already declared that.
}
Note: A, B, C can be either class or protocol, or any other types. This leaves developer more freedom.


Impact on existing code

This is a new feature, developer who need declare common type will alter to this new grammar.
Enum based version optional or IUO will be replaced by Union-based ones. Any optional type will automatically replaced by union type

 <https://github.com/frogcjn/swift-evolution/blob/master/proposals/xxxx-union-type.md#detailed-design>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160811/dfa0201d/attachment.html>


More information about the swift-evolution mailing list