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 資料Swift
- Swift學習——A Swift Tour 資料型別Swift資料型別
- Swift,類的呼叫Swift
- Swift:類與物件Swift物件
- Swift UI 學習資料SwiftUI
- Swift 資料型別(二)Swift資料型別
- Swift 的資料問題Swift
- swift學習資料整理Swift
- Swift實踐:使用CoreData儲存多種資料類的通訊錄Swift
- 資料結構 & 演算法 in Swift (一):Swift基礎和資料結構資料結構演算法Swift
- 大資料的資料模型大資料模型
- 資料模型與資料分析模型
- Mysql資料庫-資料模型MySql資料庫模型
- Swift教程Swift語言快速入門(內部資料)Swift
- 理解BW資料模型 - DSO模型模型
- Cassandra 資料模型模型
- 《資料安全能力成熟度模型》實踐指南01:資料分級分類模型
- Swift 類與結構體Swift結構體
- Swift,結構體與類Swift結構體
- Swift—類的繼承-備Swift繼承
- ios基本類庫(偏swift)iOSSwift
- [譯]LINQ TO SQL 介紹(定義資料模型類) – Part.2SQL模型
- Swift 使用JSON資料結構SwiftJSON資料結構
- 資料結構 堆排序 c Swift資料結構排序Swift
- swift網路資料請求方法Swift
- 學習swift的資料彙總Swift
- 全面的Swift學習資料整理Swift
- 10django模型[模型類]Django模型
- Python資料模型Python模型
- Hadoop資料模型Hadoop模型
- 資料模型需要多少訓練資料?模型
- 大資料類大資料
- 資料分類
- Swift 專案總結 01 Swift 反射應用於模型歸檔Swift反射模型
- Swift-類和結構體Swift結構體
- Swift通過類名建立物件Swift物件
- [譯]Swift 中的通用資料來源Swift
- Swift 3 網路請求+資料解析Swift