2017-10-08 3 views
1

Comment puis-je dire au domaine que je veux qu'il calcule et stocke la propriété en lecture seule? Disons que j'ai le modèle suivant:Comment forcer l'inclusion de la propriété calculée?

class User: Object { 
    @objc dynamic var fullName: String { 
     return "\(name) \(surname)" 
    } 
    @objc dynamic var name = "" 
    @objc dynamic var surname = "" 
} 

Je voudrais avoir formé le nom complet sur l'action d'écriture. Est-ce possible sans utiliser de solution de contournement avec un setter fictif?

+0

Je n'ai pas d'expérience avec royaume, mais ce pourrait être un double de https: // stackoverflow .com/questions/37718946/does-realm-support-calculé-propriété-en-swift? –

+0

@MartinR, je pense que cela pourrait être d'une certaine manière. Peut-être que cela vaut la peine de répondre à ma question avec une solution de contournement? Je pense que cela pourrait aider les gens. – own2pwn

Répondre

1

Les propriétés en lecture seule sont automatiquement ignorées, car cela n'a absolument aucun sens de les stocker dans une base de données. Si vous avez vraiment besoin de le stocker dans une base de données, vous pouvez créer une fonction de mise à jour pour votre classe User et l'utiliser pour enregistrer l'entité dans la base de données.

Quelque chose comme ceci:

class User: Object { 
    @objc dynamic var fullName = "" 
    @objc dynamic var name = "" 
    @objc dynamic var surname = "" 

    static func create(name: String, surname: String, in realm: Realm) { 
     let user = realm.create(User.self) 
     user.name = name 
     user.surname = surname 
     user.fullName = "\(name) \(surname)" 
} 

Ensuite, vous venez de créer votre entité comme ceci:

... 
let realm = try! Realm() 
try! realm.write { 
    User.create(name: name, surname: surname, in: realm) 
}