Swift 和 iOS 8+ 的 CoreData 仍然需要 willAccessValueForKey()?
CoreData with Swift and iOS 8+ still needs willAccessValueForKey()?
我正在我的 NSManagedObject 子类中编写一个名为 Friend 的函数。
不知是否应该这样写(user是另一个NSManagedObjectUser):
func firstCharacterOfComputerDisplayName() -> String
{
guard let user = self.friend else {
return ""
}
return user.firstCharacterOfComputerDisplayName()
}
或者那个:
func firstCharacterOfComputerDisplayName() -> String
{
self.willAccessValue(forKey: "friend")
guard let user = self.primitiveValueForKey("friend") as? User else {
self.didAccessValue(forKey: "friend")
return ""
}
let dispName = user.firstCharacterOfComputerDisplayName()
self.didAccessValue(forKey: "friend")
return dispName
}
是否使用willAccessValue(forKey:)
、primitiveValueForKey(_:)
和didAccessValue(forKey:)
与您是否使用Swift或iOS无关 8.严格来说是Core数据的东西。 Core Data使用KVO维护数据图的完整性等,所以对什么时候观察变化和访问有一定的预期。
大多数情况下您不需要关心这些方法,除非您重写访问器方法。如果您想要 self.friend
的值,只需要求 self.friend
。除非你要覆盖 friend
的访问器,除非你在这里不这样做。
我正在我的 NSManagedObject 子类中编写一个名为 Friend 的函数。
不知是否应该这样写(user是另一个NSManagedObjectUser):
func firstCharacterOfComputerDisplayName() -> String
{
guard let user = self.friend else {
return ""
}
return user.firstCharacterOfComputerDisplayName()
}
或者那个:
func firstCharacterOfComputerDisplayName() -> String
{
self.willAccessValue(forKey: "friend")
guard let user = self.primitiveValueForKey("friend") as? User else {
self.didAccessValue(forKey: "friend")
return ""
}
let dispName = user.firstCharacterOfComputerDisplayName()
self.didAccessValue(forKey: "friend")
return dispName
}
是否使用willAccessValue(forKey:)
、primitiveValueForKey(_:)
和didAccessValue(forKey:)
与您是否使用Swift或iOS无关 8.严格来说是Core数据的东西。 Core Data使用KVO维护数据图的完整性等,所以对什么时候观察变化和访问有一定的预期。
大多数情况下您不需要关心这些方法,除非您重写访问器方法。如果您想要 self.friend
的值,只需要求 self.friend
。除非你要覆盖 friend
的访问器,除非你在这里不这样做。