swift 第十一课 结构体定义model类

结构体是可以作为 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.通过引用计数允许一个类实例的多处引用。

当开发者在代码中传递这些实例时,结构体总是被赋值,而类则是被引用。这是结构体和类的最本质区别。