So, what I see as the problem here is contradictory compiler statements:
MyPlayground.playground:5:9: note: cannot automatically synthesize 'Encodable'
because '[String : Any]' does not conform to 'Encodable'
let someDict: [String : Any]
^
warning: MyPlayground.playground:8:18: warning: 'is' test is always true
[String : Any]() is Codable
^
So is it codable or isn't it? You can use a [String: Any] in encode() and
decode() directly, so why doesn't it get compiler support? At the least, the
message needs to be updated to something that's actually true.
> On Oct 19, 2017, at 1:38 PM, David Sweeris via swift-users
> <[email protected]> wrote:
>
> Oh! Yeah, my bad... You are correct; I'd started thinking like I was on
> -evolution instead of -users.
>
>
>> On Oct 19, 2017, at 1:29 PM, Itai Ferber <[email protected]
>> <mailto:[email protected]>> wrote:
>>
>> Mm, the point I’m trying to get at here is that JSON is inherently untyped
>> while Swift is strongly typed, and the two don’t line up.
>> It doesn’t really make sense to ask to decode an existential because there’s
>> not enough type information to influence what you get back.
>>
>> On 19 Oct 2017, at 13:20, David Sweeris wrote:
>>
>> I think if you can figure that out, you’re halfway to letting protocols
>> conform to themselves.
>>
>> (Syntactically, I would probably say that something like “Codable.Self”
>> would read well, but I think that already means something. Maybe the answer
>> will become clearer when we rework the reflection APIs?)
>>
>> Sent from my iPhone
>>
>> On Oct 19, 2017, at 13:13, Itai Ferber <[email protected]
>> <mailto:[email protected]>> wrote:
>>
>>> Even then, that wouldn’t necessarily help in the general case. If you
>>> decode {"key" : 1} as [String : Codable], what concrete type would 1 have?
>>> Int? Double? Int8? (Arguments can be made for any one of these, but the key
>>> here is that it is inherently ambiguous and there isn’t necessarily a good
>>> answer.)
>>>
>>> On 19 Oct 2017, at 12:57, David Sweeris wrote:
>>>
>>> On Oct 19, 2017, at 12:50 PM, David Baraff via swift-users
>>> <[email protected] <mailto:[email protected]>> wrote:
>>>
>>> Yes; this is a case where anywhere in the code base I want to just say
>>> struct MyNewType : Codable {
>>> // add codable datatypes
>>> }
>>>
>>> and don’t want/can’t always go to the centralized place to add it in.
>>> Is there some extension-like trick I can pull off that lets me spread the
>>> implementation out over different files/libraries?
>>>
>>> Ah, ok.
>>>
>>> No, I don't think you'll be able to do that until/unless Swift gets more
>>> macro/metaprogramming features. Maybe if protocols ever get to conform to
>>> themselves? That's a common request, but implementing it is apparently
>>> beyond tricky. I'm pretty sure somebody's working on it, but "bigger fish"
>>> and all that...
>>>
>>> - Dave Sweeris
>>>
>>
>
> _______________________________________________
> swift-users mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-users
_______________________________________________
swift-users mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-users