Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What behaviour was changed?
In order to improve SwiftyJSON performance I've changed how underlying object of JSON is stored. Previously there were 6 non-optional properties: rawArray, rawDictionary, rawString, rawNumber, rawNull, rawBool. Initialising this properties for every single JSON is expensive. Instead of this properties, I suggest to use private
Content
enum that has cases with associated values for every JSON type option. As additional benefit, this approach improves the way underlying values are accessed and provides protection from type-value inconsistency.What code was refactored / updated to support this change?
I updated how content of JSON is stored, changed object property behaviour, collection conformance + minor changes.
Performance tests report that:
Checklist:
Does this have tests?
One additional test of dictionary lookup performance has been added. Every piece of updated logic is already tested.
Does this have documentation?
Documentation is provided for all new types / properties / functions.
Does this break the public API (Requires major version bump)?
One amazing thing about this update is that public API is not affected at all. What's more, JSON-related logic doesn't change, only implementation does.
Is this a new feature (Requires minor version bump)?
There are a lot of changes, version should be bumped.