__unused NSString *lastName = [dictionary valueForKey: kLastNameKey];
ΠΠΎ Ρ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° LLVM ΡΡΠΎΡ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ, ΠΏΡΠΈΠ΄Π°Π² Π΅ΠΌΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΠΈΠ΄:
NSString *const kFirstNameKey = @"firstName";
NSString *const kLastNameKey = @"lastName";
NSDictionary *dictionary = @{
kFirstNameKey: @"Tim",
kLastNameKey: @"Cook",
};
__unused NSString *firstName = dictionary[kFirstNameKey];
__unused NSString *lastName = dictionary[kLastNameKey];
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΌΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΠ»ΠΎΠ²Π°ΡΡ, Π΄Π°Π²Π°Ρ ΠΊΠ»ΡΡΠΈ Π² ΡΠΈΠ³ΡΡΠ½ΡΡ ΡΠΊΠΎΠ±ΠΊΠ°Ρ . Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡΡΠΏΠ°ΡΡ ΠΈ Ρ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ. ΠΠΎΡ ΠΊΠ°ΠΊ ΠΌΡ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΌΠ°ΡΡΠΈΠ²Ρ:
NSArray *array = [[NSArray alloc] initWithObjects:@"Tim", @"Cook", nil];
__unused NSString *firstItem = [array objectAtIndex:0];
__unused NSString *secondObject = [array objectAtIndex:1];
Π ΡΠ΅ΠΏΠ΅ΡΡ, ΠΈΠΌΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ ΡΡΠΎΡ ΠΊΠΎΠ΄ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
NSArray *array = @[@"Tim", @"Cook"];
__unused NSString *firstItem = array[0];
__unused NSString *secondObject = array[0];
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ LLVM Π½Π΅ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΈ Π½Π° ΡΡΠΎΠΌ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΊ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΊΠ»Π°ΡΡΠ°ΠΌ. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π²Π° ΡΠΈΠΏΠ° ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π½ΠΈΡ:
ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠ»ΡΡΡ β Π΄Π΅ΠΉΡΡΠ²ΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°Π΄Π°Π²Π°ΡΡ Π²Π½ΡΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π²Ρ Π΄Π΅Π»Π°Π»ΠΈ Π±Ρ ΡΡΠΎ Π² ΡΠ»ΠΎΠ²Π°ΡΠ΅. Π£ΠΊΠ°Π·ΡΠ²Π°Ρ ΠΊΠ»ΡΡ, Π²Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ Π²Π½ΡΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΈΡ ;
ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ β ΠΊΠ°ΠΊ ΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ/ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π²Π½ΡΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ² Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈΠ½Π΄Π΅ΠΊΡ. ΠΡΠΎ ΡΠ΅Π»Π΅ΡΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎ Π΄Π΅Π»Π°ΡΡ Π² ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΠΊΠ»Π°ΡΡΠ°Ρ , Π³Π΄Π΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΡΠ΄ΠΎΠ±Π½ΠΎΠΌ Π΄Π»Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Π‘Π½Π°ΡΠ°Π»Π° ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΠΊΠ»ΡΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΊΠ»Π°ΡΡ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Person, ΠΈΠΌΠ΅ΡΡΠΈΠΉ ΡΠ²ΠΎΠΉΡΡΠ²Π° firstName ΠΈ lastName. ΠΠ°Π»Π΅Π΅ ΠΌΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΠΌΠ΅Π½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² (ΠΈΠΌΡ ΠΈ ΡΠ°ΠΌΠΈΠ»ΠΈΡ), ΠΏΡΠΎΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ² ΠΊΠ»ΡΡΠΈ Π΄Π»Ρ ΡΡΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ².
ΠΠ°ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊ ΠΊΠ»Π°ΡΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΠΊΠ»ΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Π΅: ΠΈΠΌΠ΅Π½Π° Π²Π°ΡΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² ΠΌΠΎΠ³ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ°ΠΊΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ², Π½Π΅ ΡΡΠΈΡΡΠ²Π°Ρ, Π±ΡΠ΄ΡΡ Π»ΠΈ ΠΈΠΌΠ΅Π½Π° ΡΡΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Π»ΡΡΡΠ΅ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π½Π°ΠΏΡΡΠΌΡΡ. ΠΡΡΠ³Π°Ρ ΠΏΡΠΈΡΠΈΠ½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΠΊΠ»ΡΡΡ β ΡΡΡΠ΅ΠΌΠ»Π΅Π½ΠΈΠ΅ ΡΠΊΡΡΡΡ ΡΠΎΡΠ½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ/ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π²Π°ΡΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° ΠΈ Π·Π°ΠΊΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΠΏΡΡΠΌΠΎΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΡΠΈΠΌ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ.
Π§ΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΠΊΠ»ΡΡΡ Π² Π²Π°ΡΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΠΊΠ»Π°ΡΡΠ°Ρ , Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠ΅ Π΄Π²Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΡΠΈΠ³Π½Π°ΡΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π² ΡΠ°ΠΉΠ»Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π΅ ΡΠ·Π½Π°Π΅Ρ, ΡΡΠΎ Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠ»ΡΡΡ.
#import <Foundation/Foundation.h>
/* ΠΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ ΠΊΠ°ΠΊ ΠΊΠ»ΡΡΠΈ Π΄Π»Ρ Π½Π°ΡΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² firstName
ΠΈ lastName, ΡΠ°ΠΊ ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΈΠΌΠ΅Π½Π° Π½Π°ΡΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² firstName ΠΈ lastName
Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Π½Π°ΠΌ Π½Π΅ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π½ΠΈΡΠ΅Π³ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π΅Π»ΡΠ²Π°ΡΡ
ΠΈ Π½Π°Ρ ΠΊΠ»Π°ΡΡ ΠΎΡΡΠ°Π½Π΅ΡΡΡ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΡΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ
ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠΈΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ Π² Π½Π°ΡΠ΅ΠΌ ΡΠ°ΠΉΠ»Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ */
extern NSString *const kFirstNameKey;
extern NSString *const kLastNameKey;
@interface Person: NSObject
@property (nonatomic, copy) NSString *firstName;
@property (nonatomic, copy) NSString *lastName;
β (id) objectForKeyedSubscript:(id<NSCopying>)paramKey;
β (void) setObject:(id)paramObject forKeyedSubscript:(id<NSCopying>)paramKey;
@end
ΠΠ΅ΡΠΎΠ΄ objectForKeyedSubscript: Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠ΅ Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡ ΠΊΠ»ΡΡ ΠΈ Π·Π°Ρ ΠΎΡΠ΅Ρ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ Π΄Π°Π½Π½ΠΎΠΌΡ ΠΊΠ»ΡΡΡ. ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π²Π°ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°Π½, Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΠΊΠ»ΡΡ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ Ρ ΠΎΡΠ΅Ρ ΡΡΠΈΡΠ°ΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠ΅Π΅ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊ ΡΡΠΎΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π²ΡΠ·ΡΠ²Π°ΡΡ Π² Π½Π°ΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ setObject: forKeyedSubscript: Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ Π·Π°Ρ ΠΎΡΠ΅Ρ Π·Π°Π΄Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ°. ΠΡΠ°ΠΊ, Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, Π°ΡΡΠΎΡΠΈΠΈΡΠΎΠ²Π°Π½Ρ Π»ΠΈ Π·Π°Π΄Π°Π½Π½ΡΠ΅ ΠΊΠ»ΡΡΠΈ Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΈ ΡΠ°ΠΌΠΈΠ»ΠΈΡΠΌΠΈ. ΠΡΠ»ΠΈ ΡΡΠΎ ΡΠ°ΠΊ, ΡΠΎ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ/ΠΏΠΎΠ»ΡΡΠΈΡΡ Π² Π½Π°ΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ ΡΠ°ΠΌΠΈΠ»ΠΈΠΈ:
#import Β«Person.hΒ»
NSString *const kFirstNameKey = @"firstName";
NSString *const kLastNameKey = @"lastName";
@implementation Person
β (id) objectForKeyedSubscript:(id<NSCopying>)paramKey{
NSObject<NSCopying> *keyAsObject = (NSObject<NSCopying> *)paramKey;
if ([keyAsObject isKindOfClass: [NSString class]]){
NSString *keyAsString = (NSString *)keyAsObject;
if ([keyAsString isEqualToString: kFirstNameKey] ||
[keyAsString isEqualToString: kLastNameKey]){
return [self valueForKey: keyAsString];
}
}
return nil;
}
β (void) setObject:(id)paramObject forKeyedSubscript:(id<NSCopying>)paramKey{
NSObject<NSCopying> *keyAsObject = (NSObject<NSCopying> *)paramKey;
if ([keyAsObject isKindOfClass: [NSString class]]){
NSString *keyAsString = (NSString *)keyAsObject;
if ([keyAsString isEqualToString: kFirstNameKey] ||
[keyAsString isEqualToString: kLastNameKey]){
[self setValue: paramObject forKey: keyAsString];
}
}
}
@end
ΠΡΠ°ΠΊ, Π² ΡΡΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΊΠ»ΡΡ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ objectForKeyedSubscript:, Π° Π² ΠΎΡΠ²Π΅Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²Π΅ΡΠ½ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π°ΡΡΠΎΡΠΈΠΈΡΠΎΠ²Π°Π½ Π² Π½Π°ΡΠ΅ΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ΅ Ρ ΡΡΠΈΠΌ ΠΊΠ»ΡΡΠΎΠΌ. ΠΠ»ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ, β ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ NSCopying. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠΎΠΏΠΈΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π Π°ΡΡΡΠΈΡΡΠ²Π°Π΅ΠΌ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΊΠ»ΡΡ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΡΡΡΠΎΠΊΡ, ΡΡΠΎΠ±Ρ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ ΡΡΠ°Π²Π½ΠΈΡΡ Π΅Π³ΠΎ Ρ Π³ΠΎΡΠΎΠ²ΡΠΌΠΈ ΠΊΠ»ΡΡΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ Π·Π°ΡΠ°Π½Π΅Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ Π² Π½Π°ΡΠ°Π»Π΅ ΠΊΠ»Π°ΡΡΠ°. Π ΡΠ»ΡΡΠ°Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ Π·Π°Π΄Π°Π΄ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π² ΡΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ valueForKey:, ΠΎΡΠ½ΠΎΡΡΡΠΈΠΌΡΡ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ NSObject, ΡΡΠΎΠ±Ρ Π²Π΅ΡΠ½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π°ΡΡΠΎΡΠΈΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ. ΠΠΎ, ΡΠ°Π·ΡΠΌΠ΅Π΅ΡΡΡ, ΠΏΡΠ΅ΠΆΠ΄Π΅, ΡΠ΅ΠΌ ΡΠ°ΠΊ ΠΏΠΎΡΡΡΠΏΠΈΡΡ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΡΠΎ Π΄Π°Π½Π½ΡΠΉ ΠΊΠ»ΡΡ β ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ΅Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ. Π ΠΌΠ΅ΡΠΎΠ΄Π΅ setObject: forKeyedSubscript: ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠ΅ β ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ°, Π° Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΠΈΡ .
Π’Π΅ΠΏΠ΅ΡΡ Π² Π»ΡΠ±ΠΎΠΉ ΡΠ°ΡΡΠΈ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° Person ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π·Π°ΡΠ°Π½Π΅Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΊΠ»ΡΡΠΈ kFirstNameKey ΠΈ kLastNameKey, ΡΡΠΎΠ±Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² firstName ΠΈ lastName, Π²ΠΎΡ ΡΠ°ΠΊ:
Person *person = [Person new];
person[kFirstNameKey] = @"Tim";
person[kLastNameKey] = @"Cook";
__unused NSString *firstName = person[kFirstNameKey];
__unused NSString *lastName = person[kLastNameKey];
ΠΡΠΎΡ ΠΊΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄ΠΎΡΡΠΈΡΡ ΡΠΎΡΠ½ΠΎ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°, ΡΡΠΎ ΠΈ ΠΏΡΠΈ Π±ΠΎΠ»Π΅Π΅ Π»ΠΎΠ±ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΊΠ»Π°ΡΡΠ°:
Person *person = [Person new];
person.firstName = @"Tim";
person.lastName = @"Cook";
__unused NSString *firstName = person.firstName;
__unused NSString *lastName = person.lastName;
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ β ΡΠΎΡΠ½ΠΎ ΠΊΠ°ΠΊ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ. ΠΠ°ΠΊ Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ ΡΠ°Π½Π΅Π΅, ΡΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π΅Π»Π°ΡΡ, ΡΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ, Π²ΡΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΌ Π² ΠΊΠ»Π°ΡΡΠ΅ Π² Π½Π΅ΠΊΠΎΠ΅ΠΌ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅. ΠΠΎ, ΠΊΡΠΎΠΌΠ΅ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ², ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ ΡΠ°ΠΊ ΡΠΆ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΡΡΠΊΡΡΡ Π΄Π°Π½Π½ΡΡ , Π³Π΄Π΅ ΡΠ΅Π»Π΅ΡΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΠ²Π°ΡΡ ΠΈ Π½ΡΠΌΠ΅ΡΠΎΠ²Π°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΡΠ΅Π³ΠΎ Π½Π΅ ΡΠΊΠ°ΠΆΠ΅ΡΡ ΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π½ΠΈΠΈ ΠΏΠΎ ΠΊΠ»ΡΡΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π² ΡΠ°ΠΌΡΡ ΡΠ°Π·Π½ΡΡ ΡΡΡΡΠΊΡΡΡΠ°Ρ Π΄Π°Π½Π½ΡΡ . ΠΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΌ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ, Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π°Π΄ΡΠΌΠ°Π½. Π ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ Π½Π°Ρ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π» ΠΊΠ»Π°ΡΡ Person Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ ΡΠ°ΠΌΠΈΠ»ΠΈΠ΅ΠΉ. Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΈΠΌΡ, ΡΠΊΠ°Π·ΡΠ²Π°Ρ ΠΈΠ½Π΄Π΅ΠΊΡ 0, Π° ΡΠ°ΠΌΠΈΠ»ΠΈΡ β ΡΠΊΠ°Π·ΡΠ²Π°Ρ ΠΈΠ½Π΄Π΅ΠΊΡ 1. ΠΡΠ΅, ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ, β ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ objectAtIndexedSubscript: ΠΈ setObject: atIndexedSubscript: Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΊΠ»Π°ΡΡΠ°, Π° Π·Π°ΡΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ. ΠΠΎΡ ΠΊΠ°ΠΊ ΠΌΡ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌ Π΄Π²Π° ΡΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΊΠ»Π°ΡΡΠ° Person:
β (id) objectAtIndexedSubscript:(NSUInteger)paramIndex;
β (void) setObject:(id)paramObject atIndexedSubscript:(NSUInteger)paramIndex;
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ°. ΠΡ Π±Π΅ΡΠ΅ΠΌ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΈ ΠΎΠΏΠ΅ΡΠΈΡΡΠ΅ΠΌ ΠΈΠΌ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π² Π½Π°ΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠ΅. Π Π°Π½Π΅Π΅ ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ, ΡΡΠΎ Ρ ΠΈΠΌΠ΅Π½ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ 0, Π° Ρ ΡΠ°ΠΌΠΈΠ»ΠΈΠΈ β ΠΈΠ½Π΄Π΅ΠΊΡ 1. ΠΡΠ°ΠΊ, ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΈΠ½Π΄Π΅ΠΊΡ 0 Π΄Π»Ρ Π·Π°Π΄Π°Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌΡ Π²Ρ ΠΎΠ΄ΡΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈ Ρ. Π΄.:
β (id) objectAtIndexedSubscript:(NSUInteger)paramIndex{
switch (paramIndex){
case 0:{
return self.firstName;
break;
}
case 1:{
return self.lastName;
break;
}
default:{
[NSException raise:@"Invalid index" format: nil];
}
}
return nil;
}
β (void) setObject:(id)paramObject atIndexedSubscript:(NSUInteger)paramIndex{