[swift-evolution] Fwd: Union instead of Optional

Cao Jiannan frogcjn at 163.com
Sun May 15 05:34:44 CDT 2016

for example, there is a method input union of 3 types: A, B, C,

This is the three class.

class A {}

class B {}

class C {}

This is how it implemented under Swift 2:

enum UnionABC {
    case classA(A)
    case classB(B)
    case classC(C)

func input(value: UnionABC) {

let a = A()
let b = B()
let c = C()

It needs announce all the cases and name each cases and cannot use class names as their case names.

what about using union? It is more easy and rational.

func input(value: (A | B | C)) {

let a= A()

Or you can implement it with protocol and extension, but compiler will not know how many cases it should have.

protocol UnionABC {

extension A: UnionABC {}
extension B: UnionABC {}
extension C: UnionABC {}

func input(value: UnionABC) {
    if value is A {
    } else if value is B {
    } else if value is C {
    } else {
        // There are other cases? Compiler doesn't know

let a = A()

> 下面是被转发的邮件:
> 发件人: frogcjn at 163.com
> 主题: 回复: [swift-evolution] Union instead of Optional
> 日期: 2016年5月15日 GMT+8 18:00:55
> 收件人: Austin Zheng <austinzheng at gmail.com>
> Enum and Union are two things.
> If you use Enum to implement Union, you should announce it with case name.
> Another issue using enum instead of union is that,  union can combine types as many as possible, you just write ( A | B | C ... | Z), but for enum, you should carefully announce it for each case. 
> 在 2016年5月15日,15:22,Austin Zheng <austinzheng at gmail.com <mailto:austinzheng at gmail.com>> 写道:
>> In addition, not everything in Swift can be modeled in terms of inheritance relationships.
>> I'm a little curious as to why union types keep on coming up, when enums can do everything they can and much more (methods, constraints on generic types, conformance to protocols).
>> Austin
>>>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>>>> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160515/5bf009e4/attachment.html>

More information about the swift-evolution mailing list