Bonjour, Chciałbym przetłumaczyć ćwiczenie obiektywu z książki Aarona na szybkie, ale nie mogę znaleźć rozwiązania. Kod Objective'c to:keyPathsForValuesAffecting z NSManagedObject
@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];
}
Znalazłem funkcję w dokumentacji dla programistów, ale nie mogę zrozumieć, jak zaimplementować ten kod.
być bardziej wyraźne, to doc Jabłko
do jednego Relationships
Aby automatycznie wyzwalać powiadomienia dla relacji do jednego należy albo nadpisać keyPathsForValuesAffectingValueForKey: albo wdrożyć odpowiednie metoda zgodna ze wzorcem, który definiuje do rejestrowania zależnych kluczy.
Na przykład pełne imię i nazwisko osoby jest zależne od imienia i nazwiska. Metoda, która zwraca pełną nazwę można zapisać następująco:
- (NSString *)fullName {
return [NSString stringWithFormat:@"%@ %@",firstName, lastName];
}
Aplikacja obserwując własności fullname musi być powiadomiony, gdy albo firstName lub właściwości lastName zmienić, jak wpływają one na wartość nieruchomości.
Jednym z rozwiązań jest zastąpienie keyPathsForValuesAffectingValueForKey: określenie, że właściwość fullName danej osoby jest zależna od właściwości lastName i firstName. Listing 1 pokazuje przykład wdrożenie takiego uzależnienia:
Zamieszczone 1 Przykład wdrożenia 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
Czy ktoś mógłby mi powiedzieć, jak wdrożyć tę funkcję w systemie SWIFT?
Dziękuję za pomoc.
Należy zauważyć, że dla Swift 2.x sygnatura funkcji klasy musi być 'override class func keyPathsForValuesAffectingValueForKey (key: String) -> Set' –