On Mon, Mar 13, 2017 at 4:41 PM Tony Allevato <[email protected]> wrote:
> This strikes me as fairly equivalent to "union types", which are on the > frequently rejected proposals list: > (hit Send too soon) > > > > On Mon, Mar 13, 2017 at 4:14 PM Elijah Johnson via swift-evolution < > [email protected]> wrote: > > I don’t know if this feature has yet existed in any languague, but its > pretty simple. > > Let say you are preparing data for a JSON encoder. Right now, you would > add to an Dictionary or Array like this one: > > let data = [String:Any](); > > but what one is really saying is that “Any” is from a number of distinct > types: > > group typedef JSONValueType : String, Double, Int, [String:JSONValueType], > [JSONValueType], Bool > > So from the compiler’s point of view, this group typedef would be just > like the “Any” type, only it would refuse to compile unless the proper type > was passed. So the result would be, as an example, that there could be > created an (almost) fail-safe JSON encoder: > > let data = [String:JSONValueType](); > data[“key] = “value”; > > I’m sure this has plenty of uses outside of JSON encoding and would be > pretty simple to do. One problem that it would solve it the fact that in > Swift, everything is included by Any, including optionals, ex: > > let b : String? = nil; > > let a : Any = b; // result is warning: “Expression implicitly coerced > from String? to Any" > > and so there is no way to include value types and objects without also > including optionals, though this “Any” (like Object and void* in Java/C) > syntax makes for poorly documented code when the type isn’t really “Any”, > but a collection of known types. > > There already exist protocols, but they are not useful for types that one > has not defined (like the basic system types), or for mixing particular > values, structs, and classes. > _______________________________________________ > swift-evolution mailing list > [email protected] > https://lists.swift.org/mailman/listinfo/swift-evolution > >
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
