Bonjour、アーロンの本から客観的な演習を迅速に翻訳したいのですが、解決策が見つかりません. 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のドキュメントです
一対一の関係
対 1 関係の通知を自動的にトリガーするには、keyPathsForValuesAffectingValueForKey: をオーバーライドするか、依存キーを登録するために定義されたパターンに従う適切なメソッドを実装する必要があります。
たとえば、個人のフル ネームは姓と名の両方に依存します。完全な名前を返すメソッドは、次のように記述できます。
- (NSString *)fullName {
return [NSString stringWithFormat:@"%@ %@",firstName, lastName];
}
fullName プロパティを監視するアプリケーションは、firstName プロパティまたは lastName プロパティのいずれかが変更されたときに通知を受ける必要があります。これらはプロパティの値に影響を与えるためです。
1 つの解決策は、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
この機能を迅速に実装する方法を教えてもらえますか?
助けてくれてありがとう。