<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Hi Vladimir,<br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Nov 9, 2017, at 8:36 AM, Vladimir Kushelkov via swift-corelibs-dev &lt;<a href="mailto:swift-corelibs-dev@swift.org" class="">swift-corelibs-dev@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class="">

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" class="">

<div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
<div class="">1. Sometimes it is contently to be able to decode a struct or an object from&nbsp;<span style="color: rgb(36, 41, 46); orphans: 2; widows: 2; background-color: rgb(255, 255, 255);" class="">a Foundation object (either NSArray or NSDictionary) that
 produce a valid JSON.</span></div>
<div class=""><span style="orphans: 2; widows: 2; background-color: rgb(255, 255, 255);" class=""><font color="#24292e" class="">For example, if I use a 3d party library that provides&nbsp;</font></span><span style="orphans: 2; widows: 2; background-color: rgb(255, 255, 255);" class=""><font color="#24292e" class=""><i class="">NSDictionary</i>&nbsp;to
 me. Due to&nbsp;</font></span><span style="color: rgb(36, 41, 46);" class=""><i class="">JSONDecoder</i> decodes only from
<i class="">Data</i>,</span><span style="orphans: 2; widows: 2; background-color: rgb(255, 255, 255);" class=""><font color="#24292e" class="">&nbsp;in the first place I have to convert
<i class="">NSDictionary</i> to <i class="">Data</i>&nbsp;in order to use&nbsp;</font></span><font color="#24292e" class="">the one so far. But the decoder does the back action first thing.</font></div>
<div class=""><font color="#24292e" class="">I created&nbsp;</font><a href="https://github.com/apple/swift/pull/12791" class="">Pull Request</a><font color="#24292e" class="">, that was closed.</font></div></div></div></blockquote><div>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.</div><div>This needs to be squared away with other work on <font face="SFMono-Regular" class="">JSONDecoder</font>/<font face="SFMono-Regular" class="">PropertyListDecoder</font><font face="SFHello-Regular" class="">&nbsp;— you may have seen a recent email on here from Florent Vilmart about exposing the underlying </font><font face="SFMono-Regular" class="">_JSONEncoder</font><font face="SFHello-Regular" class=""> and </font><font face="SFMono-Regular" class="">_JSONDecoder</font><font face="SFHello-Regular" class="">; we’re currently considering exposing the underlying conversion mechanism here in an </font><font face="SFMono-Regular" class="">Encoder</font><font face="SFHello-Regular" class="">/</font><font face="SFMono-Regular" class="">Decoder</font><font face="SFHello-Regular" class=""> pair similar to Norio’s </font><font face="SFMono-Regular" class="">ObjectEncoder</font><font face="SFHello-Regular" class="">. There might be a more general solution here than just exposing the behavior on </font><font face="SFMono-Regular" class="">JSONDecoder</font><font face="SFHello-Regular" class="">.</font></div><div><font face="SFHello-Regular" class=""><br class=""></font></div><div><font face="SFHello-Regular" class="">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.</font></div><br class=""><blockquote type="cite" class=""><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">

<div class=""><font color="#24292e" class="">2. Is it possible to use&nbsp;</font><i style="color: rgb(36, 41, 46);" class="">JSONDecoder</i><font color="#24292e" class="">&nbsp;when I don’t know the type of a particular property of the required type?</font></div>
<div class=""><font color="#24292e" class="">For&nbsp;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</font><font color="#24292e" class="">&nbsp;data. So, the type of the property&nbsp;is unknown&nbsp;inside&nbsp;the library. I want to decode the internal object with JSONDecoder, but I can’t&nbsp;specify the type of one property.</font></div></div></div></blockquote><div>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.</div><br class=""><blockquote type="cite" class=""><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
<div class=""><br class="">
</div>
</div>

_______________________________________________<br class="">swift-corelibs-dev mailing list<br class=""><a href="mailto:swift-corelibs-dev@swift.org" class="">swift-corelibs-dev@swift.org</a><br class="">https://lists.swift.org/mailman/listinfo/swift-corelibs-dev<br class=""></div></blockquote></div><br class=""></body></html>