Shouldn't it be "fn1 = fn0"? Same for the fn2 statements. `var fn0: A->Void = {print(v0)} var fn1: (A|B)->Void = {print(v0)}
fn0 = fn1 // OK, because Original Type and Union Type has a sub-typing relationship var fn2: (A|B|C)->Void = {print($0)} fn0 = fn2 // OK fn1 = fn2 // OK` > On Aug 10, 2016, at 9:28 PM, Cao Jiannan via swift-evolution > <swift-evolution@swift.org> wrote: > > 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 > > 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 > > > _______________________________________________ > 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