你好,
我想把一个客观的练习从Aaron的书翻译成快速但我无法找到解决方案. Objective’c代码是:
我想把一个客观的练习从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
To-one Relationships
要为一对一关系自动触发通知,您应该覆盖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覆盖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) } }
谢谢您的帮助一月
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。