Bonjour,我想将 Aaron 书中的 Objective'c 练习翻译成 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];
}
我在开发人员文档中找到了一个函数,但我不明白如何实现此代码。
更明确地说,这是 Apple 文档
一对一的关系
要为一对一关系自动触发通知,您应该覆盖 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
有人能告诉我如何快速实现这个功能吗?
感谢你们对我的帮助。