Jan 272013
 

Biasanya programming language menggunakan dot syntax untuk panggil method atau dapatkan property.

contohnya,

//get
CGFloat height = box.height;

//set
box.height = 5;

Dengan menggunakan KVC, untuk set atau get

//get
[box setValueForKey:@"height"];

//set
CGFloat height = [box valueForKey:@"height];

Dengan menggunakan KVC ada banyak kelebihan. Contohnya anda ada satu Class Box . Di bawah menunjukkan interface class box, ada 3 properties height, width dan length

@interface Box : NSObject

@property (nonatomic, assign) CGFloat height;
@property (nonatomic, assign) CGFloat width;
@property (nonatomic, assign) CGFloat length;

Contohnya ada satu array yang mempunyai boxes, dan anda nak tambahkan total height.

NSArray *boxes = ... //Initialize boxes height, width, and length

//Cara biasa nak tambahkan total height
CGFloat totalHeight = 0;
for (Box theBox in boxes)
{
    totalHeight += theBox.height
}

//Menggunakan KVC untuk tambah height
CGFloat totalHeight = [[boxes valueForKeyPath:@"@sum.height"] floatValue];

Macam mana, lagi simple bukan? Contoh lagi jika nak hanya widths array

//Menggunakan cara biasa untuk dapatkan widths array
NSMutableArray *widths = [NSMutableArray array];
for (Box theBox in boxes)
{
    [widths addObject:@(theBox.height)];
}

//Menggunakan KVC untuk dapatkan array of widths
NSMutableArray *widths = [boxes valueForKeyPath:@"height"];

Jika anda lihat @sum dinamakan collection operator, ada beberapa lagi collection operator seperti @avg, @min, @max dan @count seperti dalam documentation

Yang menarik adalah boleh juga kalau nak define custom operator sendiri.

Dalam objective c tak semestinya menggunakan KVC tapi ada sesetengah tempat yg lebih baik menggunakan KVC. Dengan menggunakan KVC juga dapat memendekkan lagi code dan juga menjadikan code nampak lebih kemas seperti contoh di atas.

Leave a Reply