[Swift]枚举、类与结构体的对比

[Swift]枚举、类与结构体的对比,第1张

概述###枚举、类与结构体的对比### ####枚举与其他两者的关系####   首先说枚举,相对比较好区分,因为我们知道,枚举与其他两者最大的相同之处就在于都可以定义方法。   而其他的更多特性,对于枚举基本没有,没有属性,每一个枚举值都是常量。 并且,我们也知道,枚举中所定义的方法,也基于对本身值的 *** 作,无法定义一些无关的属性和 *** 作。 enum Animation2048Type{ ca

###枚举、类与结构体的对比### ####枚举与其他两者的关系####   首先说枚举,相对比较好区分,因为我们知道,枚举与其他两者最大的相同之处就在于都可以定义方法
  而其他的更多特性,对于枚举基本没有,没有属性,每一个枚举值都是常量。
并且,我们也知道,枚举中所定义的方法,也基于对本身值的 *** 作,无法定义一些无关的属性和 *** 作。

enum Animation2048Type{    case None   //无动画    case New    //新出现动画    case Merge  //合并动画    func description()->String{            switch(self){                case .None:            return "无动画"        case .New:            return "新出现动画"        case  .Merge:            return "合并动画"        }    }}print(Animation2048Type.Merge.description())

####类与结构体的关系####   类和结构体则相同之处,多于不同之处,甚至在一些情况下,把struct关键字修改为class都不会带来编译错误。
  比如下标脚本一节中Matrix类,我们可以方便地切换为struct类型。
它们的共同点如下:
1. 都可以定义一些可以复制的属性。
  属性的类型和写法大多相同。当然也有不同,比如类型属性的写法,在类中用class前缀,在结构体中用static前缀修饰。
2. 都可以定义具有功能性的方法。
  可定义方法类型也大多相同,但正如属性,对于类型方法的定义,在类中用class前缀,在结构体中用static前缀修饰。
3. 都可以定义下标脚本,使用下标语法。
4. 都可以定义初始化方法来设置初始状态,初始化属性
5. 都可以做扩展实现

当然两者还是有一些不同之处:
1. 在数据结构的扩展和继承方面,类更加强大。
2. 我们可以让一个类的实例来执行反初始化方法,使其释放存储空间,但是结构体做不到。
3. 类的对象是引用类型,而结构体是值类型

可以用下面的这个例子看一下:

class People{    var name=""    init(name:String)    {        self.name = name    }}struct Human{    var name=""    init(name:String)    {        self.name = name    }}var xw = People(name: "xiaowang")print(xw.name)var p = xw;p.name = "xiaoPing"print(xw.name)var lm = Human(name: "liming")print(lm.name)var l = lml.name = "liliang"print(lm.name)

  上面这个例子很好地说明了结构体和类的一些相同之处和不同之处。
  可以看到,类、结构体在定义、初始化方法、属性定义等方面几乎完全相同,classstruct关键字可以互换。
  但是我们同时又看到,将各自的对象赋值给新值,对新值进行修改之后,类的老值也跟着变化,而结构体的老值则没有发生改变。
  
  可见,类的赋值是传引用,而结构体则是传值。
  值类型与引用类型除了上面这种修改方式,导致不同的结构,还有一个比较方式也不同。比如两个结构体,只要属性值相同,我们就可以认为结构体相同,是同一个结构体。而两个类的对象,光是属性值相同,并不一定相同,不一定是类的同一个对象。
  
  那什么时候应该使用结构体,什么时候应该使用类呢?
  在代码中可以选择类或者结构来实现你所需要的代码块,完成相应的功能。但是结构实例传递的是值,而类实例传递的是引用。那么对于不同的任务,应该考虑到数据结构和功能的需求不同,从而选择不同的实例。
  一般来说,下面的一个或多个条件满足时,应当选择创建一个结构:   1. 结构主要是用来封装一些简单的数据值   2. 当赋值或者传递的时候更希望这些封装的数据被赋值,而不是被引用过去   3. 所有被结构存储的属性本身也是数值类型   4. 结构不需要被另外一个类型继承或者完成其他行为  在其他情况下,类会是更好的选择。也就是说一般情况下,数据都会定义为类。

总结

以上是内存溢出为你收集整理的[Swift]枚举、类与结构体的对比全部内容,希望文章能够帮你解决[Swift]枚举、类与结构体的对比所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1082570.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存