It is no a mistake. since fn1: (A|B)->Void is subtype of fn0: A->Void
Detail explain: var fn0: A->Void = {print($0)} var fn1: (A|B)->Void = {print(v0)} let a = A() let b = B() So: fn0( a ) // this is OK fn1( a ) // this is also OK fn1 is subtype of fn0, because fn1 can do anything fn0 do. Thus fn0 = fn1 is OK. But: fn1( b ) // this is OK fn0( b ) // this is not OK So fn0 is not subtype of fn1 At 2016-08-11 10:41:02, "Step C" <schristop...@bignerdranch.com> wrote: 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 relationshipvar 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. funcinput(value: A | B | C) { print(value.commonProperty) // type checker will calculate the common interface, developer just use it out of boxswitch value { caselet value as A: // value is type Aprint(value.propertyInA) caselet value as B: // value is type Bprint(value.propertyInB) caselet value as C: // value is type Cprint(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