[iOS Programming] 什麼是 Key-Value Coding?
剛剛收到班上同學的來信,說他在網路上看到一個名詞,叫 Key-Value Coding。問我什麼是 Key-Value Coding。由於這個主題比較冷僻,用到的機會也不能算多。在只有 48 小時得把所有 iOS SDK 教完的壓力下,這個主題被我捨棄了。沒想到同學們還是很用功啊!看來我不講是不行的了(所以說,出來混,一定要還的...)。
先做個定義吧:「Key-Value Coding 就是一種可以用『字串』,來存取物件內某個『屬性欄位』的技巧」。
假設你有一個類別叫做「People」,裡面有兩個屬性欄位「name」與「addr」定義如下:
@interface People : NSObject
{
NSString *name;
NSString *addr;
}
@property NSString *name;
@property NSString *addr;
@end
然後你用 People 宣告了一個名為 robert 的物件,並指定初值給它。如下所示:
People *robert = [[People alloc] init];
robert.name = @"Robert";
robert.addr = @"台北市忠孝東路 1 號";
若你要存取「name」與「addr」屬性,你得這麼寫:
NSLog(@"%@", robert.name); // 印出 robert 物件 name 屬性內容 --> "Robert"
NSLog(@"%@", robert.addr); // 印出 robert 物件 addr 屬性內容 --> "台北市忠孝東路..."
使用 Key-Value Coding,你可以這麼存取屬性值:
NSLog(@"%@", [robert valueForKey:@"name"]); // 存取到 robert 內的 name 欄位。
你有沒有注意到,欄位名稱「name」被字串化了!也就是說,只要你把 "name" 改為 "addr",抓到的欄位值就是 robert.addr 的了。
這有什麼好處呢?舉例來說,你製作了一個資料庫 App,有個下拉式清單,列出所有可以讓使用者選擇的欄位名稱。如「姓名」、「住址」...。使用者只要選擇了一個欄位,如:住址,就可以印出當前物件內,住址那一欄。如果你先把「姓名」與對應的欄位名稱「name」、以及「住址」與對應的欄位名稱「addr」…以「鍵值對(Key-Value Pair)」的方式存放好:
Key Value
------------
姓名 name
住址 addr
...
在 Objective-C 內,鍵值對是用 NSDictionary 類別存放的:
NSArray *keys = [[NSArray alloc] initWithObjects: @"姓名", @"住址", …nil];
NSArray *values = [[NSArray alloc] initWithObjects: @"name", @"addr", … nil];
NSDictionary *dic = [[NSDictionary alloc] initWithObjecs:values forKeys:keys];
則 Key 可以拿去當下拉式功能表要顯示的內容。當使用者選擇了其中一項,如:「姓名」,我就可以拿回到「鍵值對」的物件,查到它對應的值是「"name"」。接著,我就可以用所謂的「Key-Value Coding」這招,抓出當前物件姓名欄位的值:
NSLog(@"%@", [robert valueForKey: theValue]); // theValue 代表由「鍵值對」中查到的值「"name"」。
若使用者選擇的是「住址」,則 theValue 會被填入「"addr"」,上述程式碼不用改一個字,照常抓出 robert 物件內住址欄位的值。
您看出「Key-Value Coding」的價值了嗎?萬一 People 類別內有上百個欄位,我要印出特定欄位的值,都是用下列這一道就解決了:
NSLog(@"%@", [robert valueForKey:@"name"]);
不用 Key-Value Coding、把物件的屬性欄位「字串化」的話,想存取特定欄位,你一定得寫一堆 if ~ else:
if (選中的欄位 == 「姓名」)
fieldToBePrinted = robert.name;
else if (選中的欄位 == 「住址」)
fieldToBePrinted = robert.addr;
else
…
這樣,大家知道 Objective-C 內的 Key-Value Coding 是什麼意思了嗎?
同時也有1部Youtube影片,追蹤數超過6,210的網紅SHIO 郭修彧,也在其Youtube影片中提到,你知道SHIO的盲點是什麼嗎? 看過這支花絮,你就會瞭解了~ 期許每個人都能夠打破自己的盲點! 《盲點》MV ?https://youtu.be/0fcRvsRM3pc 【盲點】?https://shio.lnk.to/qYaTNJeX...
nil是什麼 在 SHIO 郭修彧 Youtube 的最讚貼文
你知道SHIO的盲點是什麼嗎?
看過這支花絮,你就會瞭解了~
期許每個人都能夠打破自己的盲點!
《盲點》MV ?https://youtu.be/0fcRvsRM3pc
【盲點】?https://shio.lnk.to/qYaTNJeX
nil是什麼 在 帶你逛街去西門町Nil 與Itn - VLOG.1 Kicks Center馬利 馬利隔壁 的推薦與評價
每天開不同超跑是什麼感覺?藍寶堅尼、勞斯萊斯、麥拉倫...直擊利曼車庫總價「破億」的潮物、超跑收藏|《嘿!蒐 ... ... <看更多>
nil是什麼 在 nil n/a分別在PTT/Dcard完整相關資訊 - 萌寵公園 的推薦與評價
【問題】nil全寫- 自助旅行最佳解答-202104132021年4月13日· 偵測) 翻譯為英文How to teach a tutor? tw英文的「家教怎麼... 【背包客最愛】 N/A nil 分別- 自助旅行最 ... ... <看更多>
nil是什麼 在 詢問蝦皮賣家NiL真假 - 穿搭板 | Dcard 的推薦與評價
最近在找vans鞋款,找到該賣家!,有嘗試爬文只是還是找不太到相關資訊!,想請問這家是不是正的!,麻煩各位替小弟解答!謝謝- 詢問,蝦皮,賣家. ... <看更多>