[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()
input(UnionABC.classA(a))


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()
input(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()
input(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