Ders 14 : Setter Ve Getter


Hemen Propertyler dersimizi hatırlayın. Bir Class için property tanımlamayı öğrenmiştik. Bugün de setter ve getter denilen veya kısaltılıp set ve get metodları denilen bir yapıdan bahsedeceğim. Herşeyden önce şunu bilelim : Setter ve Getter birer fonksiyondur.

Ne işe yararlar ?

Aslında her bir property oluşturduğunuzda bu property'nin set ve get fonksiyonları oluşmuş olur. Objenin bu property'sine atama işlemi yaptığınızda set fonksiyonuna girilir. Ve bu property'ye atama yapmayıp sadece değerine erişmek için get fonksiyonu çağırılır. Şimdi Classımızı oluşturuyoruz.

@interface Robot : NSObject

@property NSString * name;
@property int health;
@property float speed;

@end

Bu robot Classımızın bazı propertyleri var. "Name" propertysi için hali hazırda set ve get metodları hazır.

Set metodu

-(void)setName:(NSString *)name
{
    _name = name;

}

Get metodu

-(NSString *)name{
    return _name;
}

Şimdi sorumuza dönelim. Ne işe yararlar ? Aslında gerçekten çok kullanışlı bir sistem bu. Düşünün ki oyununuzda bir robot var. Robot her hasar yediğinde hem canı azalsın istiyorsunuz hemde robotun canının azaldığı her zaman robotun bağırmasını istiyorsunuz. Her zaman bunları ayrı ayrı yazmak yerine health property'sinin set metodu içinde ses çıkarma işlemini gerçekleştirebiliriz. Şunun gibi

-(void)setHealth:(int)health
{
    _health = health; // canı azalt
    [self CrashSound]; // müziği çal

}

Set ve Get Kullanımı 

Setters ve Getters metodlarını bir arada kullanabilmek için @synthesize kullanmamız gerek. Ne olduğunu sonraki derslerimizde açıklayacağız.

@synthesize name = _name;

-(NSString *)name{
    NSLog(@"Adımı söyledim");
    return _name;
}
-(void)setName:(NSString *)name
{
    _name = [name substringFromIndex:0];

}


Eğer bunu kullanmazsanız hata alırsınız. Ayrıca propertylerin nonatomic veya atomic özellikte olması gerekir. Bunu da sonraki derslerimizde açıklayalım. Bunun için yapmanız gereken

@property (nonatomic) NSString * name;
//veya
@property (natomic) NSString * name;

Şeklinde parentezler içinde atomic veya nonatomic olduğu belirtmek.



Hiç yorum yok :

Yorum Gönder