swift 資料模型Modle類
//簡介 oc是一個物件導向即模型的開發,一般規範的開發都是以模型作為物件進行開發的。那麼在swift中模型也同樣重要下面介紹一下模型的賦值
1.介紹下 模型一鍵賦值的程式碼 setValuesForKeyWithDictionary 這句話的作用 是把字典Dictionary中的key對應的Value 賦值給模型中的與key一樣的屬性
1)分三種情況 第一種情況是 模型中的屬性等於 字典中的額key 並且一一對應 那麼可以賦值
2)第二種 模型中的屬性大於字典中的key即模型除了與字典一一對應的屬性之外還有其他屬性 那麼這個賦值也有用
3)第三種 模型中的屬性小於或者字典中存在模型中沒有的屬性名字 那麼就會報錯
2.針對第三種情況 解決辦法是 在模型中加上這句話就可以了 不要進行任何操作
override func setValue(value:AnyObject?, forUndefinedKey key:String) {
}
下面附上程式碼例子
//這邊是建立一個簡單 Person的模型 然後在介面賦值
import UIKit
class PersonModel: NSObject {
//這是一個Person模型
/// 年齡
var age:Int =0
/// 姓名
var name:String =""
/// 性別
var sex:String =""
/// 這邊定義一個在字典裡面的key是swift中的關鍵字的屬性
var undefine:String =""
/**
這個方法是防止使用setvalueforkeysWithDictionary的時候字典裡的key在模型裡面沒有處理方法一般是把方法寫出來裡面不用寫東西這樣字典裡出現模型沒有的key的時候不會報錯也不會賦值(除非像下面自己手動賦值)
- parameter value: 模型中未定義的key值對應的value值
- parameter key: 模型中未定義的key值或者跟跟關鍵字衝突的字典的key值
*/
overridefunc setValue(value: AnyObject?, forUndefinedKey key:String) {
if key =="Int"
{
undefine = valueas! String
}
}
/**
寫一個建構函式主要目的是讓其初始化的時候就有進行模型賦值不然一般步驟是建立這個模型然後模型進行setvaluesForkeywithdictionary
- returns: 返回賦值後的模型
*/
overrideinit() {
super.init()
let dic = ["age":18,"name":"Clement","sex":"man","Int":"test"]
//模型一鍵賦值這個其實是運用了kvc的原理
self.setValuesForKeysWithDictionary(dic)
}
/**
這邊是自定義的建構函式可以從外面傳參使其初始化
- parameter dic: 初始化模型的字典
- returns: 返回賦值後的模型
*/
init(dic:[String:AnyObject])
{
super.init()
//模型一鍵賦值這個其實是運用了kvc的原理
self.setValuesForKeysWithDictionary(dic)
}
}
import UIKit
class ViewController: UIViewController {
overridefunc viewDidLoad() {
super.viewDidLoad()
//方式1用建構函式初始化並列印結果這個是自帶的模型
let personOne =PersonModel()
print("模型的引數\(personOne.age) \(personOne.name) \(personOne.sex) \(personOne.undefine)")
//方式二用自定義的建構函式
let dic = ["age":28,"name":"Clement__","sex":"man__ ","Int":"nuewtype"]
let personTwo =PersonModel.init(dic: dic)
print("模型TWO的引數\(personTwo.age) \(personTwo.name) \(personTwo.sex) \(personTwo.undefine)")
//方式三不寫建構函式(即不用init)
let personThree =PersonModel()
let dicThree = ["age":38,"name":"Clement__three","sex":"man__Three","Int":"nuewtype_three"]
//外部對模型進行賦值
personThree.setValuesForKeysWithDictionary(dicThree)
print("模型Three的引數\(personThree.age) \(personThree.name) \(personThree.sex) \(personThree.undefine)")
}
overridefunc didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
//輸出結果
相關文章
- Swift UI 學習資料SwiftUI
- Swift實踐:使用CoreData儲存多種資料類的通訊錄Swift
- Swift 類與結構體Swift結構體
- 《資料安全能力成熟度模型》實踐指南01:資料分級分類模型
- [譯]LINQ TO SQL 介紹(定義資料模型類) – Part.2SQL模型
- Classy:根據資料庫表在執行時建立類/模型資料庫模型
- Mysql資料庫-資料模型MySql資料庫模型
- Swift 專案總結 01 Swift 反射應用於模型歸檔Swift反射模型
- Swift-類和結構體Swift結構體
- Swift 3 網路請求+資料解析Swift
- [譯]Swift 中的通用資料來源Swift
- 《大話資料結構》Swift-01資料結構Swift
- 《大話資料結構》Swift-02資料結構Swift
- swift基本資料型別使用-字典使用Swift資料型別
- Python資料模型Python模型
- Cassandra 資料模型模型
- Hadoop資料模型Hadoop模型
- 最新 Swift5 常見資料型別Swift資料型別
- 10django模型[模型類]Django模型
- Kotlin 資料類Kotlin
- iOS學習筆記43 Swift(三)類iOS筆記Swift
- 使用Swift 字典模型互轉 超級簡單Swift模型
- 資料治理之資料模型管控方案模型
- 資料分析-皮膚資料變截距模型模型
- 不知道資料模型?一文帶你瞭解資料模型!模型
- 文字分類模型文字分類模型
- SQLAIchemy資料模型關聯SQLAI模型
- 資料倉儲 - ER模型模型
- 模型資料追加欄位模型
- 資料分析八大模型:同期群模型大模型
- CDM(Conceptual Data Model,概念資料模型)和 PDM(Physical Data Model,物理資料模型)模型
- Swift 幾種動態判斷類的方法Swift
- Swift 專案總結 02 常用分類方法Swift
- 微信終端開源資料庫 WCDB – Swift 版本資料庫Swift
- 分層資料 Hierarchical Data 探索 (3.巢狀集合模型) 無限極分類巢狀模型
- 分層資料 Hierarchical Data 探索 (2.鄰接表模型) 無限極分類模型
- 資料治理與資料分類分級!
- 四類NoSQL資料庫SQL資料庫