Reputation: 10938
I would like to override a Core Data dynamically generated accessor method as can be done in Objective-C.
For instance when a Team
's name
is nil
return its first Player
's name
instead.
Something like:
class Team: NSManagedObject {
@NSManaged var name: String { // Error: @NSManaged not allowed on computed properties
get
{
self.willAccessValueForKey("name")
var teamName = self.primitiveValueForKey("name")
self.didAccessValueForKey("name")
return teamName ?? (self.players.firstObject as! Player).name
}
}
@NSManaged var breakPoints: NSOrderedSet
@NSManaged var gamesWon: NSOrderedSet
@NSManaged var matches: NSOrderedSet
@NSManaged var matchesWon: NSOrderedSet
@NSManaged var players: NSOrderedSet
@NSManaged var pointsWon: NSOrderedSet
@NSManaged var setsWon: NSOrderedSet
}
While keeping the stored values untouched and transparently change the value read by objects accessing the Team
's name
already.
Upvotes: 3
Views: 1826
Reputation: 80265
You do not override Core Data accessors in Swift. Instead, create separate computed properties.
@NSManaged var actualName: String
var name: String {
get {
self.willAccessValueForKey("actualName")
let teamName = self.primitiveValueForKey("actualName")
self.didAccessValueForKey("actualName")
return teamName ?? (self.players.first as! Player).name
}
set {
name = newValue
// omitting KVC markers here
actualName = newValue
}
}
Upvotes: 5