> On Mar 12, 2017, at 7:52 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.
What are your thoughts on enums for this use-case?
- Dave Sweeris
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution