先介绍一个struct 和 class 两个有什么不一样?
1.struct 无法继承,不能像class 一样继承完成重用和多态。但是struct 可以通过组合和接口实现完成重用和多态。从这一点来说struct是比class有优势的。
2.struct 是值类型,class是引用类型。各有好处值类型不用担心内存问题,但无法跨view完成同一个对象调用,只能是copy一份新对象使用。class 的内存问题是需要程序要注意的,但是指针引用的强大毋庸置疑的。
说到这里,知道有什么不一样了,那么在使用的时候应该如何确定使用struct or class?
这是一个问题,首先来了解一个概念:程序 = 算法 + 数据结构。算法实际就是我们调用的函数,数据结构可以理解为class or struct。我们定义一个简单的场景,数据排序问题,但是我们不会使用这种例子[1,3,5,7,2,4]。
先定义两个数组,一个struct 数组,一个class数组
struct Cat{
var age:Int?
}
class Dog{
var age:Int?
init(age:String){
self.age = age
}
}
//struct数组
var arrayS = [Cat(age:1),Cat(age:6),Cat(age:3),Cat(age:2),Cat(age:8)]
//class数组
var arrayC = [Dog(age:1),Dog(age:6),Dog(age:3),Dog(age:2),Dog(age:8)]
这两个数据排序会发生什么?
for i in 0...(arrayS.count - 2) { //n个数进行排序,只要进行(n - 1)轮操作
for j in 0...(arrayS.count - i - 2){ //开始一轮操作
if arrayS[j] < arrayS[j + 1] {
var temp = arrayS[j] //交换位置 copy一份新struct
arrayS[j] = arrayS[j + 1]
arrayS[j + 1] = temp;
}
}
}
arrayS = 都会生成一个新的对象struct,add到新的数组中,struct是在栈中开辟内存使用的,有栈管理。
for i in 0...(arrayC.count - 2) { //n个数进行排序,只要进行(n - 1)轮操作
for j in 0...(arrayC.count - i - 2){ //开始一轮操作
if arrayC[j] < arrayC[j + 1] {
var temp = arrayC[j] //交换位置 指针操作
arrayC[j] = arrayC[j + 1]
arrayC[j + 1] = temp;
}
}
}
arrayC = 不会生成新的对象,只是对class 指针操作,变换在数组中的位置。因为在堆内存操作,会增加CPU读取使用的消耗。
理论上struct 的排序更快,这里只是比较struct 和 class 使用场景。
struct 更快,简单,安全,适合数据处理操作使用,在iOS开发中适合http请求的数据操作中使用。对于数据的处理解析和其他操作更快,更省内存。
对前端简单定义就是 data + view,该如何使用呢?
struct http: {
func load(callBack:(array:Array<DataModel>)){
NetWorking.share.POST("/UserList",{(result) -> in
var array = result["datt"]
var list = [DataModel]()
for value in list{
list.append(DataModel(name:value["name"]))
}
callBack(list)
})
}
}
struct DataModel{
var name:String?
}
class ViewController{
override func viewDidLoad() {
super.viewDidLoad()
let table = UITable()
self.view.addSubView(table)
http().load(callBack:{ (list) -> //数据请求刷新列表
table.array = list
table.reloadData()
})
}
}
现在我们可以确定网络数据使用struct是非常好的,项目中凡是用到数据操作的都可以使用struct。比如数据请求,数据存储,数据传输,数据分析,数据转换等等。
有一个demo,使用VueSwift 编写的大家可以看看,提携意见。VueSwift 一个轻量级无侵入,IOC和面向接口编程的轻量级框架。
wangyongyue/swift-struct-demogithub.com