2016-05-19 6 views
1

Lassen Sie uns sagen, dass ParentClass eine String-Eigenschaft hat a genannt:Objective-C Eigenschaft alias

@property (nonatomic, strong) NSString *a;

In einer Unterklasse ChildClass ich die Eigenschaft wollen b ein Alias ​​für super.a sein. Die Bedeutung b hat keinen wirklichen Wert, es zeigt nur auf a. Wenn sich der Wert a ändert, sollte dies in b widergespiegelt werden und umgekehrt.

Was ist der sauberste Weg, dies in Objective-C zu erreichen.

+1

Sie könnten sich einen Getter für 'b' schreiben, der auf' a' zeigt? – Larme

Antwort

0

Sie können keine Aliase als solche tun. Die Eigenschaften sind jedoch nur kurz für Methodenimplementierungen. Subklassen erben (sichtbar) Eigenschaften ihrer übergeordneten Klasse (n), so dass Sie wie die etwas tun folgendes:

- (void)setB:(NSString *)b { 
    self.a = b; 
} 

- (NSString *)b { 
    return self.a; 
} 

Wenn a nicht sichtbar für die Unterklasse ist, müssen Sie etwas tun:

- (void)setB:(NSString *)b { 
    [self setValue:b forKey:@"a"]; 
} 

- (NSString *)b { 
    return [self valueForKey:@"a"]; 
} 

Dies funktioniert, weil zur Laufzeit keine Typprüfung stattfindet. Wenn die Eigenschaft also vorhanden ist (mit den Standardnamen für Getter und Setter), können Sie sie dennoch mit KVC manipulieren.

+0

Es ist am besten, die Erklärung zusammen mit dem Code hinzuzufügen, da sie sonst gelöscht werden kann. – AlBlue

Verwandte Themen