swift – 使用NSManagedObject的keyPathsForValuesAffecting

swift – 使用NSManagedObject的keyPathsForValuesAffecting,第1张

概述你好, 我想把一个客观的练习从Aaron的书翻译成快速但我无法找到解决方案. Objective’c代码是: @dynamic firstName;@dynamic lastName;@dynamic department;+ (NSSet *)keyPathsForValuesAffectingFullName{ return [NSSet setWithObjects:@"f 你好,
我想把一个客观的练习从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 Locataires: NSManagedobject {@NSManaged var firstname: String@NSManaged var lastname: Stringvar 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)    }}

谢谢您的帮助一月

总结

以上是内存溢出为你收集整理的swift – 使用NSManagedObject的keyPathsForValuesAffecting全部内容,希望文章能够帮你解决swift – 使用NSManagedObject的keyPathsForValuesAffecting所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1019554.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存