> 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

Reply via email to