iOS開發之KVC

來源:互聯網
上載者:User

標籤:

1KVC概述

KVC(Key-value coding)是一套利用字串標識符間接訪問對象屬性和關係的機制。Cocoa Programming中,Core Data,Application Scriptability, 綁定(Binding)技術和聲明屬性之一語言特性等,都是以KVC為基礎的。(Application Scriptability 和 綁定(Binding)是Mac OS X上特有的)。你也可以用Key-value coding來簡化你的代碼。

KVC(鍵-值編碼)是一個用於間接訪問對象屬性的機制,使用該機制不需要調用getset方法就可以設定或擷取成員變數的值

2KVC的基礎

Keys and Key Paths

KEY:鍵(Key)是一個標識了對象的某個屬性的字串。通常,在接收對象中,一個鍵對應的是一個存取方法或者執行個體變數的名稱。Key必須是ASCII編碼,以小寫字母開頭,並且不能包含空白符。

鍵的一些樣本:payee, openingBalance, transactions, amount等

Key Path:鍵路徑(Key Path)是一個由多個Key組成,Key與Key之間用點(.)分開的字串,通過順序遍曆,擷取對象屬性。鍵路徑中的鍵序列的第一個鍵相對於當前的接收對象,而後續的鍵只與前一個鍵對應的屬性相關。

例如,對於鍵路徑address.street,其中我們從當前的接收對象中擷取address這一屬性值,然後再通過這個address的對象屬性去擷取street屬性。

使用KVC擷取屬性值:

方法valueForKey:

返回特定鍵對應的值,這個值是與接收對象相關的。如果輸入的鍵沒有對應的方法或者執行個體變數,接收對象會發出valueForUndefinedKey: 訊息。方法valueForUndefinedKey:預設會拋出NSUndefinedKeyException異常,可以在子類中改寫。

方法valueForKeyPath:

與之類似,返回特定鍵路徑在對應接收對象中的值。當鍵路徑的鍵序列中有任何一個鍵無法對應相容KVC的對象,則接收對象都會發出valueForUndefinedKey: 訊息。

方法dictionaryWithValuesForKeys:

對輸入的鍵數組中的每一個鍵進行檢索,返回包含了這些鍵對應的值的NSDictionary。

【備忘】集合對象(Collection Object),如NSArray, NSSet, NSDictionary等不能包含nil值。可以使用NSNull來替代nil放入集合對象中標識空值。NSNull提供一個簡單的執行個體來表示對象屬性的nil值。在方法 dictionaryWithValuesForKeys: 和 setValuesForKeysWithDictionary: 中,NSNull和nil之間的轉換是自動的,所以你的對象不用明確測試NSNull值。

使用KVC設定屬性值:

方法setValue:forKey:

給特定的鍵設值,這個值相對於對應的接收對象或者是已經提供的值。

方法setValuesForKeysWithDictionary:

可以從字典映射到對象,不需要再給一一給對象來賦值。使用NSDictionary來給一組鍵設值。該方法內部調用setValue:forKey:給每一組索引值對設值。想存入空值時,使用NSNull取代nil。 該方法常用於字典轉模型中,比如:

- (instancetype)initWithDict:(NSDictionary *)dict

{

    if (self = [super init]) {

        self.icon = dict[@"icon"];

        self.title = dict[@"title"];

        self.answer = dict[@"answer"];

        self.options = dict[@"options"];

    }

    return self;

}

 

+ (instancetype)questionWithDict:(NSDictionary *)dict

{

    return [[self alloc] initWithDict:dict];

}

可以用KVC寫成:

+ (instancetype) questionWithDict:(NSDictionary *)dict

{

    return [[self alloc] initWithDict:dict];

}

 

- (instancetype)initWithDict:(NSDictionary *)dict

{

    if (self = [super init]) {

        [self setValuesForKeysWithDictionary:dict];

    }

    return self;

}

iOS開發之KVC

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.