IOS KVC 問題集

題目1

題目1
1
2
3
4
5
6
@property (nonatomic,getter=issFf) float ff;
-(float)issFf{
return _ff+3;
}

_ff = 100;
  1. self.ff = ? 103
  2. [self valueForKey:@"ff"] = ? 100

『提示』:

這題的觀念在於理解property 的 accessor 和 KVC 的 accessor 並非相同一個

因為 KVC 的 accessor 本身已經有既定的搜尋對象

KVC 的 accessor 搜尋過程請參考 : KVC 簡報accessor lookup

題目2

現在有個純字串的array內容是@[@"a",@"b",@"c"],如何拿到全部大寫的array?[@[@”a”,@”b”,@”c”] valueForKey:@”uppercaseString”]

現在有個dict內容是@{@"a":@"aa",@"b":@"bb"},如何拿到key值為b的內容?並且轉成大寫?


[@{@”a”:@”aa”,@”b”:@”bb”} valueForKey:@”b”]

[@{@”a”:@”aa”,@”b”:@”bb”} valueForKeyPath:@”b.uppercaseString”]

『提示』:

此題觀念在於 collection 物件對 KVC 有著不一樣的詮釋方式

對 array 做 KVC 其實是對 array 裏面的所有元素做一次 KVC 的動作

對 dictionary 做 KVC 一樣也是作用到裏面的元素,但是還可以進一步去取用某個key

可以參考簡報 KVC Collection

題目3

現在有個array內容是@[@1,@2,@3]

  1. 如何獲得array內的個數 [@[@1,@2,@3] valueForKey:@”@count”]
  2. 如何獲得最大 最小 平均 [@[@1,@2,@3] valueForKey:@”@max.self”]

『提示』:

因為對 array 做 KVC 其實是對 array 裏面的所有元素做一次 KVC 的動作

如果我們想對 array 做 KVC 的話,在key的前面必須加上@

例如:[array count] -> [array valueForKey:@”@count”]

3-2 必須搭配final題才會解釋比較清楚

題目4

KVC能做到什麼事情?

PS:跟KVC的運作流程有相關

  1. 進階用途 KVO
  2. 存取property
  3. 存取property的property valueForKeyPath:
  4. … and more

IOS KVC兼容

IOS KVC搜尋順序

『提示』:

就在上面兩行!!

kvc題目final!!(封印中…)

NSArray *array1 = @[@"1",@"2",@"3"];
NSArray *array2 = @[@1,@2,@3];
Q1.對array1皆append "abc"
Q2.對array2 皆乘上10
Q3.對array1皆append 任意字串
Q4.對array2 皆乘上任意數字

『提示』:

4-1 以及 4-2 是相對簡單的題目

從題目2已經知道對 array 做 KVC 其實是對 array 裏面的所有元素做一次 KVC 的動作

所以只要幫NSString 和 NSNumber個別新增一個方法,就大功告成