结构体是可以作为 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.通过引用计数允许一个类实例的多处引用。 当开发者在代码中传递这些实例时,结构体总是被赋值,而类则是被引用。这是结构体和类的最本质区别。