結構體是可以作為 model 類使用的不過也要 寫下的創建方法
import UIKit
/***
創建一個model 結構,重寫init 方法,
結構體的屬性不能出現可選類型
**/ struct Model { var title :String var url :String var numId :String init(dic :NSDictionary) { self.title = (dic["title"] as? String)! self.numId = (dic["numId"] as? String)! self.url = (dic["url"] as? String)! } } class ViewController: UIViewController { lazy var dicArr : Array<Dictionary<String, Any>>! = { var arr = Array<Dictionary<String, Any>>() for i in 0...26{ var dic = Dictionary<String,Any>() var title = String(format:"name_%f", CGFloat(i)) var numId = String(format:"numId_%d",i) var url = String(format:"https://name -%@ - numId %@",title,numId) dic["title"] = title dic["numId"] = numId dic["url"] = url arr.append(dic) } return arr }() override func viewDidLoad() { super.viewDidLoad() for dic in self.dicArr {//在這里調用下 稍后公布測試打印的結果 let model = Model.init(dic: dic as NSDictionary) print(model.url) } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }
測試結果:
https://name -name_0.000000 - numId numId_0 https://name -name_1.000000 - numId numId_1 https://name -name_2.000000 - numId numId_2 https://name -name_3.000000 - numId numId_3 https://name -name_4.000000 - numId numId_4 https://name -name_5.000000 - numId numId_5 https://name -name_6.000000 - numId numId_6 https://name -name_7.000000 - numId numId_7 https://name -name_8.000000 - numId numId_8 https://name -name_9.000000 - numId numId_9 https://name -name_10.000000 - numId numId_10 https://name -name_11.000000 - numId numId_11 https://name -name_12.000000 - numId numId_12 https://name -name_13.000000 - numId numId_13 https://name -name_14.000000 - numId numId_14 https://name -name_15.000000 - numId numId_15 https://name -name_16.000000 - numId numId_16 https://name -name_17.000000 - numId numId_17 https://name -name_18.000000 - numId numId_18 https://name -name_19.000000 - numId numId_19 https://name -name_20.000000 - numId numId_20 https://name -name_21.000000 - numId numId_21 https://name -name_22.000000 - numId numId_22 https://name -name_23.000000 - numId numId_23 https://name -name_24.000000 - numId numId_24 https://name -name_25.000000 - numId numId_25 https://name -name_26.000000 - numId numId_26
那么問題就出現了,結構體和類做 model時候,有什么不同呢??????
Swift中的類與結構體有如下相似點: 1.定義屬性來存儲值。 2.定義函數來提供功能。 3.通過定義下標語法使用下標的方式取值。 4.定義構造方法來對其進行初始化。 5.通過擴展來在原始基礎上添加功能。 6.通過協議來定義實現標准。 當然類和結構體也有許多不同點,下面這些功能是類獨有的,結構體沒有: 1.通過繼承來創建類的子類。 2.在運行時允許對類的實例進行類型的檢查和解釋。 3.析構方法可以釋放被類引用的資源。 4.通過引用計數允許一個類實例的多處引用。 當開發者在代碼中傳遞這些實例時,結構體總是被賦值,而類則是被引用。這是結構體和類的最本質區別。