Hi Vladimir,

> On Nov 9, 2017, at 8:36 AM, Vladimir Kushelkov via swift-corelibs-dev 
> <swift-corelibs-dev@swift.org> wrote:
> 
> 1. Sometimes it is contently to be able to decode a struct or an object from 
> a Foundation object (either NSArray or NSDictionary) that produce a valid 
> JSON.
> For example, if I use a 3d party library that provides NSDictionary to me. 
> Due to JSONDecoder decodes only from Data, in the first place I have to 
> convert NSDictionary to Data in order to use the one so far. But the decoder 
> does the back action first thing.
> I created Pull Request <https://github.com/apple/swift/pull/12791>, that was 
> closed.
Thanks for putting together this pull request! As Tony mentioned in his 
response to it, this type of change would need to go through API review, both 
internal, and external, before we could accept it.
This needs to be squared away with other work on 
JSONDecoder/PropertyListDecoder — you may have seen a recent email on here from 
Florent Vilmart about exposing the underlying _JSONEncoder and _JSONDecoder; 
we’re currently considering exposing the underlying conversion mechanism here 
in an Encoder/Decoder pair similar to Norio’s ObjectEncoder. There might be a 
more general solution here than just exposing the behavior on JSONDecoder.

This is being tracked internally, and I hope to have a good answer in the next 
Swift release. In the meantime, there are workarounds like what Norio has done.

> 2. Is it possible to use JSONDecoder when I don’t know the type of a 
> particular property of the required type?
> For instance, if I develop a library that allows bi-directional communication 
> between server and client. The library wraps transmitted data into an 
> internal object in a way that one of the object’s properties is the data. So, 
> the type of the property is unknown inside the library. I want to decode the 
> internal object with JSONDecoder, but I can’t specify the type of one 
> property.
No, this is not possible. You cannot decode an object without being able to 
specify its type statically — you’ll need the client to somehow pass along the 
type, or provide enough information for you to decode on their behalf.

> 
> _______________________________________________
> swift-corelibs-dev mailing list
> swift-corelibs-dev@swift.org
> https://lists.swift.org/mailman/listinfo/swift-corelibs-dev

_______________________________________________
swift-corelibs-dev mailing list
swift-corelibs-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-corelibs-dev

Reply via email to