[譯]2.5-Key-Value Coding Programming Guide 官方文檔第二部分第5節

Key-Value Coding Programming Guide 官方文檔第二部分第5節 2018.9.20 第一次修正html

iOS-KVC官方文檔第二部分第5節swift

Key-Value Coding Fundamatals--Validating Properties

驗證屬性

鍵值編碼協議定義了支持屬性驗證的方法。就像使用基於鍵的訪問器來讀取和寫入符合鍵值編碼的對象的屬性同樣,您也能夠按鍵(或鍵路徑)驗證屬性。當您調用validateValue:forKey:error:(或validateValue:forKeyPath:error:) 方法時, 協議的默認實現將搜索接收驗證消息的對象 (或在鍵路徑的末尾的對象), 以查找名稱與模式匹配的方法validate<Key>:error:。若是對象沒有此類方法, 則默認狀況下驗證成功, 默認實現返回YES`。當存在屬性特定的驗證方法時, 默認實現將返回調用該方法的結果。app

注意 您一般僅在Objective-C中使用此處描述的驗證。在 Swift 中, 經過依賴 optionals 和強類型檢查的編譯器支持, 能夠更便捷地處理屬性驗證, 同時使用內置的 willSet 和 didSet 屬性觀察器來測試任何運行時 API 協定, 詳見 The Swift Programming Language (Swift 4.2) 中*Property Observers*章節對willSet didSet的描述。ide

因爲屬性特定的驗證方法經過引用的方式接收值和錯誤參數, 所以驗證有三種可能的結果:測試

  1. 驗證方法判斷值對象有效並返回YES而不改變值或錯誤。
  2. 驗證方法判斷值對象無效, 但選擇不更改它。在這種狀況下, 該方法返回NO並將錯誤引用 (若是調用方提供) 設置到NSError指示失敗緣由的對象。
  3. 驗證方法判斷值對象無效, 但建立一個新的、有效的對象做爲替換。在這種狀況下, 該方法返回YES同時保持錯誤對象不變。返回以前, 該方法修改值引用以指向新值對象。當它進行修改時, 該方法老是建立一個新對象, 而不是修改舊值, 即便 value 對象是可變的。

清單 6-1顯示瞭如何調用name字符串的驗證的示例。ui

Person* person = [[Person alloc] init];
NSError* error;
NSString* name = @"John";
if (![person validateValue:&name forKey:@"name" error:&error]) {
    NSLog(@"%@",error);
}
複製代碼

自動驗證

一般, 鍵值編碼協議及其默認實現都不定義任何自動執行驗證的機制。相反, 您能夠在您的應用程序中使用適合的驗證方法。編碼

某些其餘Cocoa技術在某些狀況下會自動進行驗證。例如, Core Data會在保存託管對象上下文時自動執行驗證 (詳見*Core Data Programming Guide)。此外, 在 macOS 中, Cocoa Bindings 容許您指定驗證是否自動進行 (請閱讀Cocoa Bindings Programming Topics*瞭解有關Cocoa Bindings的更多信息。)。spa

因爲筆者水平有限,文中若是有錯誤的地方,或者有更好的方法,還望大神指出。 附上本文的全部 demo 下載連接,【GitHub】。 若是你看完後以爲對你有所幫助,還望在 GitHub 上點個 star。贈人玫瑰,手有餘香。code

相關文章
相關標籤/搜索