而Key均為字串(NSString),這樣說明可能有點難以理解,但是可以透過以下例子來了解。
例子1
先在Storyboard加入一個UILabel物件,並設定Outlet
@property (weak, nonatomic) IBOutlet UILabel *myLabel;
假設我們現在想設定他的text值,正常狀態下你可能會這樣做
self.myLabel.text = @"我是Label";
我們去更改了myLabel裡面的text值,那假如利用Key-Value-Coding去做這件事要這樣寫
[self.myLabel setValue:@"我是Label" forKey:@"text"];
設定key值為text的Value為我是Label,也就是說你物件底下的所有屬性都能透過這個方式來設定
更簡單的說明就是你 物件『.』 後面都是key
那這樣用.去設定就好了,幹嘛用這個這麼麻煩? 反過來取也可以,因此可以很方便地作處理一些事情
利用 Value forKey來完成,透過key來取得屬性
例子:假設現在有一堆UILabel,也設了一堆Outlet
@property (weak, nonatomic) IBOutlet UILabel *label1;
@property (weak, nonatomic) IBOutlet UILabel *label2;
@property (weak, nonatomic) IBOutlet UILabel *label3;
@property (weak, nonatomic) IBOutlet UILabel *label4;
@property (weak, nonatomic) IBOutlet UILabel *label5;
都想設定他們的Text值
self.label1.text = @"HI";
self.label2.text = @"HI";
self.label3.text = @"HI";
self.label4.text = @"HI";
self.label5.text = @"HI";
這樣寫實在不是很酷,假設有N百個,寫到過年也寫不完
上面提到 物件『.』都能當key,如果能利用key來幫忙完成這件事有多好
這些label1~5都能夠用字串來當key取值,因為他是self底下的屬性
那就可以改成這樣寫
for (int i = 1; i < 6; i++) {
NSString *key = [NSString stringWithFormat:@"label%i",i];
UILabel *label = [self valueForKey:key];
label.text = @"hi";
}
不過要注意的是透過valueForKey回傳的值是id,因此要創建物件去接收他,就可以使用了。
沒有留言:
張貼留言