寫一個計算的方法,計算1 + 2 。 面向對象,詮釋萬物皆對象思想。 思路: YGInteger.h YGInteger.m 中寫一個description方法,和 擴展中,將數字轉換成字元串的方法 YGInteger+YGInit.h 這是Integer的Init分類 YGInteger+YGIn ...
- 寫一個計算的方法,計算1 + 2 。
- 面向對象,詮釋萬物皆對象思想。
思路:
- 寫一個YGInteger主類,裡面有一個integer屬性,順便配上description方法。
- 添加一個分類 ·YGInit· 重寫一個初始化構造方法。
- 添加一個分類 ·YGMath· 有加、減、乘、除的四個方法。
- 最後添加一個擴展,把數字轉換成字元串類型的方法。
YGInteger.h
#import <Foundation/Foundation.h> @interface YGInteger : NSObject @property(nonatomic,assign)NSInteger integer; @end
YGInteger.m 中寫一個description方法,和 擴展中,將數字轉換成字元串的方法
#import "YGInteger.h" #import "YGInteger_YGChangeValue.h" @implementation YGInteger - (NSString *)description { return [NSString stringWithFormat:@"%ld",self.integer]; } - (NSString *)changeValue { return [NSString stringWithFormat:@"%@",self]; } @end
YGInteger+YGInit.h 這是Integer的Init分類
#import "YGInteger.h" #import "YGInteger.h" @interface YGInteger (YGInit) - (instancetype)initWithInteger:(NSInteger)integer; + (instancetype)integerWithInteger:(NSInteger)integer; @end
YGInteger+YGInit.m 實現一下標配方法
#import "YGInteger+YGInit.h" @implementation YGInteger (YGInit) - (instancetype)initWithInteger:(NSInteger)integer { if (self = [super init]) { self.integer = integer; } return self; } + (instancetype)integerWithInteger:(NSInteger)integer { __autoreleasing YGInteger *i = [[YGInteger alloc]initWithInteger:integer]; return i; } @end
YGInteger+YGMath.h Integer的計算分類,裡面有加、減、乘、除 四個方法聲明。
#import "YGInteger.h" @interface YGInteger (YGMath) - (YGInteger *)add:(YGInteger *)i; - (YGInteger *)minus:(YGInteger *)i; - (YGInteger *)multiply:(YGInteger *)i; - (YGInteger *)divide:(YGInteger *)i; @end
YGInteger+YGMath.m 利用對象調用,充分體現面向對象編程。
#import "YGInteger+YGMath.h" @implementation YGInteger (YGMath) - (YGInteger *)add:(YGInteger *)i { YGInteger *result = [[YGInteger alloc]init]; result.integer = self.integer + i.integer; return result; } - (YGInteger *)minus:(YGInteger *)i { YGInteger *result = [[YGInteger alloc]init]; result.integer = self.integer - i.integer; return result; } - (YGInteger *)multiply:(YGInteger *)i { YGInteger *result = [[YGInteger alloc]init]; result.integer = self.integer * i.integer; return result; } - (YGInteger *)divide:(YGInteger *)i { YGInteger *result =[[YGInteger alloc]init]; result.integer = self.integer / i.integer; return result; } @end
YGInteger_YGChangeValue.h 最後,擴展方法中聲明一下,轉換的方法。
#import "YGInteger.h" @interface YGInteger () - (NSString *)changeValue; @end
先在storyBoard中先拖一個Label,用於顯示結果,寫一個show方法,用於把數據展示到模擬器中。
#import "ViewController.h" #import "YGInteger+YGInit.h" #import "YGInteger+YGMath.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UILabel *outputLabel; - (void)show:(YGInteger *)i; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; YGInteger *int1 = [[YGInteger alloc]initWithInteger:1]; YGInteger *int2 = [[YGInteger alloc]initWithInteger:2]; YGInteger *int3 = [int1 add:int2]; self.outputLabel.text = [NSString stringWithFormat:@"%@",int3]; // [self show:[int1 add:int2]]; } - (void)show:(YGInteger *)i { self.outputLabel.text = [NSString stringWithFormat:@"%@",i]; } @end
- 用對象add對象。形象的體現出面向對象編程。這是一種思想的體現。思想固有化,兩個數相加,覺得這麼做很麻煩,為什麼不直接傳入兩個參數呢,還要用對象調用屬性,脫褲子放屁多此一舉。
- 因為,以後的需求不僅僅是單一的只做一件事,你用對象調用,你的選擇會很多,不會局限於一種思維。如果真的選擇了用單一化思維思考問題,那麼,以後就真的只能停留在1 + 2 = 3了。
僅此。