Comments (2)
i don't see that one could get around having to serialize the property of the superclass A
- what B
is doing with its override
is saying, ignore A
s implementation and do this instead; it makes sense.
a more descriptive way of achieving the full JSON in class B
might be something like:
override func toJSON() -> JSON? {
guard
let superJSON = super.toJSON(),
var json = jsonify([ "bar" ~~> self.bar ]) else {
return nil
}
json.add(superJSON) // `add` is a custom function that combines two dictionaries
return json
}
the add
function you see there combines two dictionaries (see the ExtensionDictionary.swift
file in the Gloss library for an example of how one might implement that).
but the bigger issue i see is that this set up violates (my understanding of) the Liskov Substitution Principle - which says that a subclass should be substitutable for its superclass. in this setup, your application code would have to know it was using an instance of B
in order to access the bar
property, which means A
and B
are not substitutable. another way to phrase this is, whether we have a class of type A
or of type B
at runtime, we want calling toJSON
on it to produce the same output. so, perhaps, a rethink of the models is due.
hope that helps!
from gloss.
So I've got a test working where super.toJSON() is merged with the result of jsonify. My problem is I have hundreds of generated classes which each require implementation of these initializer/toJSON methods. Seems like tons of boilerplate code for already known and defined properties within a class. Would be nice if Swift's "reflection" would allow us to skip this manual declaration of all the mapping if the structure of the JSON and property names were verbatim and we would only need to implement toJSON when one wanted to customize the serialization.
from gloss.
Related Issues (20)
- toJSON() HOT 1
- Ambiguous operator error
- Change to change log? HOT 2
- Operators from unordered precedence groups HOT 1
- Decode json itself HOT 3
- swift package generate-xcodeproj fails HOT 4
- Carthage update fails for macOS (umbrella header 'Gloss.h' not found). Shouldn't Glass MacOS target membership be "public"? HOT 4
- Deprecated method warning in Gloss 2.0.1 HOT 1
- Can't decode 'anonymous' values HOT 3
- Cannot convert value of type 'JSON' to expected argument type 'JSON' (aka Dictionary<String, Any>') HOT 1
- Crash on device, but not on simulator
- Unexpected E0F while looking for matching HOT 3
- Value found for key "exclude_list" but decoding failed HOT 1
- Initializer 'init()' is internal and cannot be referenced from a default argument value HOT 1
- BaseResponse with Arrays and Generics HOT 1
- Update to use Swift 4.2 HOT 3
- using guard while decoding object = Value found for key "topStory" but decoding failed. HOT 3
- swift5 HOT 8
- WatchOS target should be Swift 4 HOT 6
- How to parse json that contains only array HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from gloss.