[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