在 Swift 中编写自定义访问器方法

Write custom accessor methods in Swift

我想将 Core Data 动态生成的访问器方法覆盖为 can be done in Objective-C

例如,当 Teamnamenil return 时,它的第一个 Playername 相反。

类似于:

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
}

在保持存储值不变的同时,透明地更改已访问 Teamname 的对象读取的值。

您没有覆盖 Swift 中的核心数据访问器。相反,创建单独的计算属性。

@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
 }
}