swift 同步 网络请求_swift 打开struct(结构体)的正确使用方式

先介绍一个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-demo​github.com
24495e831bcf66b3c71b3ca75dce9a9f.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值