Swift中类与结构体间的区别


Swift中类与结构体间的区别

=================

两者之间的关系

  1. 定义:结构体有0个或多个相同或者不同的数据组合而成的数据集合,其中那些数据或者方法被称为结构体的成员或者是成员方法。

  2. 格式:

struct name:<:protocal>
{ 
var 成员1:数据类型 
var 成员2:数据类型 
…. 
} 
  1. 要注意的地方:
  • 结构体是值类型,其 实例将会被赋予变量或者常量和被函数调用时被复制
  • 结构体中的成员可以包括属性、类型别名、数组、其他结构体和枚举声明
  • 结构体声明不能包含析构器或者协议声明,但是可以包括任意协议的实现,不能继承类、枚举、其他结构体

两者间的区别

在我们实际的开发中,可能会纠结于应该是使用类还是结构体,在这里我也总结了一下类与结构体间的一些区别。

结构体:

///MARK: - 结构体
struct Car 
{
   var name: String!
   init(name: String){
      self.name = name
   }
}

var p1 = Car(name: "bench")
var p2 = p1
p2.name = "BMW"
print(p2.name,p1.name)

/// 打印结果为BMW,bench

类:

///MARK: - 类
class Car
{
  var name: String!
  init(name: String){
     self.name = name
  }
}

var p1 = Car(name: "bench")
var p2 = p1
p2.name = "BMW"
print(p1.name,p2.name,p1.name)

/// 打印结果为BMW,BMW,BMW

从上面的结果可以看出来,再次给对象赋值,结构体不会改变,而类则会改变原来的值,所以说明类的对象是引用类型,而结构体是值类型。

还有的区别就是类是属于面向对象编程,结构体属于面向协议的编程,所谓面向协议编程其实就是面向对象的升级。在swift中推荐使用的是使用结构体,类在swift中不处于主流的地位,还有就是结构体也能够实现类的全部功能,结构体更模块化,默认实现初始化方法并且不用考虑ARC。

结构体只需要给出变量的类型,不用给出初始值

struct car {
   var name: String
}

类则需要给出初始值

class car {
   var name: String
   
   init(name:String) {
   self.name = name
   }
}

上面两种的效果一样。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM