[swift-evolution] Group "typedef" language feature

Tony Allevato tony.allevato at gmail.com
Mon Mar 13 18:41:13 CDT 2017


This strikes me as fairly equivalent to "union types", which are on the
frequently rejected proposals list:



On Mon, Mar 13, 2017 at 4:14 PM Elijah Johnson via swift-evolution <
swift-evolution at swift.org> 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
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170313/665f07eb/attachment.html>


More information about the swift-evolution mailing list