ping2karthikeyan
ping2karthikeyan

Reputation: 11

Realm object with dictionary of [String: Any] to save the JSON value in the property

Player Object Model

In the Player Model, I want to save the JSON response so that I will get any new computed properties in the future without changing the schema.

But here, I'm getting the error to save the json of type [String: Any].

Any alternative or recommendations...?

Upvotes: 0

Views: 511

Answers (1)

Jay
Jay

Reputation: 35667

Any is not a supported value type of Map. Looking a the documentation for Map, which shows the definition

public final class Map<Key, Value>

value is a RealmCollectionValue can be one of the following types

This can be either an Object subclass or one of the following types: Bool, Int, Int8, Int16, Int32, Int64, Float, Double, String, Data, Date, Decimal128, and ObjectId (and their optional versions)

One option is to to use AnyRealmValue so it would look like this

class Player: Object {
    @Persisted var json = Map<String, AnyRealmValue>()
}

here's how to populate the json with a string and an int

let s: AnyRealmValue = .string("Hello")
let i: AnyRealmValue = .int(100)

let p = Player()
p.json["key 0"] = s
p.json["key 1"] = i

then to get back the values stored in the map:

for key in p.json {
    let v = key.value

    if let s = v.stringValue {
        print("it's a string: \(s)")
    } else if let i = v.intValue {
        print("it's an int: \(i)")
    }
}

and the output

it's a string: Hello
it's an int: 100

Upvotes: 0

Related Questions