swift – 使用NSManagedObject的keyPathsForValuesAffecting
发布时间:2020-12-14 05:03:26 所属栏目:百科 来源:网络整理
导读:你好, 我想把一个客观的练习从Aaron的书翻译成快速但我无法找到解决方案. Objective’c代码是: @dynamic firstName;@dynamic lastName;@dynamic department;+ (NSSet *)keyPathsForValuesAffectingFullName{ return [NSSet setWithObjects:@"firstName",@"l
你好,
我想把一个客观的练习从Aaron的书翻译成快速但我无法找到解决方案. Objective’c代码是: @dynamic firstName; @dynamic lastName; @dynamic department; + (NSSet *)keyPathsForValuesAffectingFullName { return [NSSet setWithObjects:@"firstName",@"lastName",nil]; } - (NSString *)fullName { NSString *first = [self firstName]; NSString *last = [self lastName]; if (!first) return last; if (!last) return first; return [NSString stringWithFormat:@"%@ %@",first,last]; } 我在开发人员文档中找到了一个函数,但我无法理解如何实现此代码. 更明确一点,这是Apple doc
要为一对一关系自动触发通知,您应该覆盖keyPathsForValuesAffectingValueForKey:或者实现一个合适的方法,该方法遵循它为注册依赖键定义的模式. 例如,人的全名取决于名字和姓氏.返回全名的方法可以写成如下: - (NSString *)fullName { return [NSString stringWithFormat:@"%@ %@",firstName,lastName]; } 当firstName或lastName属性发生更改时,必须通知观察fullName属性的应用程序,因为它们会影响属性的值. 一种解决方案是覆盖keyPathsForValuesAffectingValueForKey:指定人员的fullName属性依赖于lastName和firstName属性.清单1显示了这种依赖的示例实现: 清单1 keyPathsForValuesAffectingValueForKey的示例实现: + (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key { NSSet *keyPaths = [super keyPathsForValuesAffectingValueForKey:key]; if ([key isEqualToString:@"fullName"]) { NSArray *affectingKeys = @[@"lastName",@"firstName"]; keyPaths = [keyPaths setByAddingObjectsFromArray:affectingKeys]; } return keyPaths; } class func keyPathsForValuesAffectingValueForKey(_ key: String) -> NSSet 有人能告诉我如何在swift中实现这个功能吗? 感谢你们对我的帮助. 解决方法
我找到了解决问题的方法!
只需使用class覆盖func keyPathsForValuesAffectingValueForKey(key:String) 这里的代码: class Locataires: NSManagedObject { @NSManaged var firstName: String @NSManaged var lastName: String var fullName: NSString { get { return firstName + lastName } } override class func keyPathsForValuesAffectingValueForKey(key: String) -> NSSet { if key == ?fullName ??{ let mesClefs = ["firstName","lastName"] return NSSet(array: mesClefs) } else { return super.keyPathsForValuesAffectingValueForKey(key) } } 谢谢您的帮助一月 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |