[swift-evolution] Group "typedef" language feature

Elijah Johnson ejrx7753 at gmail.com
Sun Mar 12 21:52:47 CDT 2017


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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170312/3fc44f57/attachment.html>


More information about the swift-evolution mailing list