在 Swift 中编写自定义访问器方法
Write custom accessor methods in Swift
我想将 Core Data 动态生成的访问器方法覆盖为 can be done in Objective-C。
例如,当 Team
的 name
是 nil
return 时,它的第一个 Player
的 name
相反。
类似于:
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
}
在保持存储值不变的同时,透明地更改已访问 Team
的 name
的对象读取的值。
您没有覆盖 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
}
}
我想将 Core Data 动态生成的访问器方法覆盖为 can be done in Objective-C。
例如,当 Team
的 name
是 nil
return 时,它的第一个 Player
的 name
相反。
类似于:
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
}
在保持存储值不变的同时,透明地更改已访问 Team
的 name
的对象读取的值。
您没有覆盖 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
}
}