Objective-C setter和getter
今天主要學習的setter和getter的使用方法, 按照昨天所學習的內容,首先我們要創建一個工程,另外在創建一個Person類!
?
=================================================================
在Person.h中 創建Person類中的幾個實例變量, 聲明setter和getter方法 ? ?"上代碼"敢問代碼是誰!
#import <Foundation/Foundation.h>?
/*
?實例變量可見度
?1.@Public 公共可見度: 在類的內部和外部都可以進行訪問,因為外部也可以訪問,所以他破壞了類的封裝特性.
?2.@Private私有可見度: 只有當前類才可以訪問,子類也無法訪問,由于子類也無法訪問,所以破壞了類的繼承特性.
?3.@Protected受保護可見度:當前類以及子類可以訪問.(是默認的)也是最適合用的!
?*/
@interface Person : NSObject
{
? ? //定義Person類的實例變量
? ? NSString *_name;//名字 屬于字符串,所以用NSString 并且要帶*
? ? NSString *_sex; //性別 屬于字符串,所以用NSString 并且要帶*
? ? NSInteger _age; //年齡 屬于常量,所以用int類型,NSInteger是OC中表示常量的,不需要帶*
? ? CGFloat _weight;//體重 數據常量,CGFload相當于fload,所以不需要帶*
}
//初始化方法
- (id)init;
?
//自定義初始化方法 形式: initWith + 接口部分的各個參數 例如:
- (id)initWtihName:(NSString *)name
?? ? ? ? ? ? ? sex:(NSString *)sex
?? ? ? ? ? ? ? age:(NSInteger)age ? //參數類型不帶*
? ? ? ? ? ? weight:(CGFloat)weight; //參數類型不帶*
//方法聲明? 打招呼
- (void)sayHi;
?
//對各個實例變量"統一"設置setter方法
//setter方法的格式 以set卡頭 + 實例變量(去掉下劃線,并且首字母大寫):(參數類型NSString)參數名
- (void)setName:(NSString *)name sex:(NSString *)sex age:(NSInteger)age weight:(CGFloat)weight;
//對各個實例變量"分開"設置setter方法
- (void)setName:(NSString *)name;
- (void)setSex:(NSString *)sex;
- (void)setAge:(NSInteger)age;
//(返回值)set(參數名)(參數類型)(參數名)
- (void)setWeight:(CGFloat)weight;
?
//對各個設置好setter方法的實例變量, 分別設置getter方法
//getter格式:返回值為對應實例變量的類型,方法名為實例變量名去掉下劃線
- (NSString *)name;
- (NSString *)sex;
- (NSInteger)age;
- (CGFloat)weight;
?
/* 最好把setter和getter方法寫在一起例如:
- (void)setName:(NSString *)name;
- (NSString *)name;
*/
@end
?
=================================================================
在Person.m文件中, 實現init方法 實現setter和getter的方法 ? "上代碼" 敢問代碼是誰!
#import "Person.h" ?//此處不要誤解是在Person.h中, 這里就是Person.m文件
@implementation Person
//初始化 對每個實例進行初始的賦值
- (id)init
{
? ? _name = @"Jack";
? ? _sex = @"male";
? ? _age = 30; //常量類型,所以不要用@"30"
? ? _weight = 160; //與age同理
? ? return self;
}
?
//調用父類系統初始化的過程
- (id)initWtihName:(NSString *)name sex:(NSString *)sex age:(NSInteger)age weight:(CGFloat)weight
{
? ? self = [super init];//調用父類的方法
? ? if (self) { //如果調用了父類的方法
? ? ? ? _name = name; // _name是最上面init中的參數, name是initWithName后面的name
? ? ? ? _sex = sex; ? // 當在main函數中name傳入新值的時候,_name就等于新的名字.
? ? ? ? _age = age;
? ? ? ? _weight = weight;
? ? }
? ? return self;
}
?
//========setter(賦值)和getter(取值)方法的實現========//
?
//方法的實現
- (void)sayHi
{
? ? NSLog(@"人都擁有打招呼的功能");//此處是對Person.h中聲明的方法進行具體的實現!
}
?
//對各個實例變量"統一"實現setter(賦值)方法
//對各個實例變量"統一"實現getter(取值)方法
- (void)setName:(NSString *)name sex:(NSString *)sex age:(NSInteger)age weight:(CGFloat)weight
{
? ? _name = name;
? ? _sex = sex;
? ? _age = age;
? ? _weight = weight;
}
?
//對各個實例變量"分別"實現setter(賦值)方法
//注:每個方法的實現都是與Person.h中聲明的都是一一對應的親!
- (void)setName:(NSString *)name
{
? ? _name = name;//將傳入進來的name的值賦給_name;可能有點繞,要仔細想想.
}
- (void)setSex:(NSString *)sex
{
? ? _sex = sex;
}
-(void)setAge:(NSInteger)age
{
? ? _age = age;
}
- (void)setWeight:(CGFloat)weight
{
? ? _weight = weight;
}
?
//對各個實例變量"分別"實現getter(取值)方法
//注:每個方法的實現都是與Person.h中聲明的都是一一對應的親!
?
- (NSString *)name //name的getter方法實現
{
? ? return _name;
? ? //return回去的是最上面init中的_name 下面的方法同理.
}
- (NSString *)sex //sex的getter方法實現
{
? ? return _sex;
}
- (NSInteger)age? //age的getter方法實現
{
? ? return _age;
}
-(CGFloat)weight? //weight的getter方法實現
{
? ? return _weight;
}
?
//建議書寫格式: 可以采用setter和getter方法寫在一塊的方式
/*
- (void)setName:(NSString *)name
{
? ? _name = name;
}
-(NSString *)name
{
? ? return self;
}
*/
@end
=================================================================
在Main函數中,導入Person.h文件, 創建Person類的對象,并且對對象進行賦值,取值 ? ? "上代碼" 敢問代碼是誰!
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[])
{
? ? //創建一個Person的對象
? ? Person *per = [[Person alloc] init];
? ? //給Person的對象per賦值名字
? ? [per setName:@"Henry"];
? ? //給對象per賦值性別
? ? [per setSex:@"male"];
? ? //給對象per賦值年齡
? ? [per setAge:30];
? ? //給對象per賦值體重
? ? [per setWeight:160];
? ? //NSLog(@"per的名字是:%@",per); ? ?此時打印per只是打印一個地址, 要給per對象一個指定的打印的實例.
? ? //如果此時,打印的結果是:? ? per的名字是:<Person: 0x100201e10> ?
??
? ? NSLog(@"per的名字:%@ 性別:%@ 年齡:%ld 體重:%.2f",[per name],[per sex],[per age],[per weight]);
? ? //打印結果:per的名字:Henry 性別:male 年齡:30 體重:160.00
?? ?
? ? //為對象per重新賦值
? ? [per setName:@"Lily" sex:@"female" age:22 weight:96];
? ? NSLog(@"per的名字:%@ 性別:%@ 年齡:%ld 體重:%.2f",[per name],[per sex],[per age],[per weight]);
? ? //打印結果:per的名字:Lily 性別:female 年齡:22 體重:96.00
? ? //per來調用Person類的方法
? ? [per sayHi];
? ? return 0;
}
好了,OC第二個課程學完了, 我也不知道是否會有人看我寫的博客, 如果有看到這些的朋友,能夠給與一些建議, 因為我也是初學者, 大家互相激勵.
今天時間還算早,我在去學習下一章的內容
轉載于:https://www.cnblogs.com/why2wm/p/4411170.html
總結
以上是生活随笔為你收集整理的Objective-C setter和getter的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python并发与并行的新手指南
- 下一篇: 利用js种的正则删除html标签