你好,
我想将亚伦书中的客观练习翻译为 swift,但我找不到解决方案。 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];
}
我在开发人员文档中找到了一个函数,但我无法理解如何实现此代码。
更明确地说,这是苹果文档
一对一关系
要自动触发一对一关系的通知,您应该重写 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
有人能告诉我如何快速实现这个功能吗?
感谢你们对我的帮助。