Swift中 Class和Struct的区别

类(Class)和结构体(Struct)区别

1.  内存管理方式不一样, 类引用类型, 分配在堆上。 结构体值类型,分配在栈上。

2. 类, 有析构。 结构体不能有析构, playground中测试直接卡死。

3. 结构体构造函数, 会自动生成带参数的构造器。类不会对有初始化赋值的属性, 生成带参数的构造器。

2. 类有继承特性,结构体没有继承特性,自然也不存在对成员属性和成员方法, 类属性和类方法的重载。

正因为结构体没有继承, 所以操作符函数, 需要static修饰, 而不能用class修饰;

struct : static func +(left:A,right:A) -> A {...}
class: static func +(left:A,right:A) -> A {...} 或者
final class func +(left:A,right:A) -> A {...}

相同点

1, 其他高级特性都差不多,结构体和类都有的特性:

操作符函数, 范型, 协议采纳, 观察器

时间: 2024-12-30 02:33:31

Swift中 Class和Struct的区别的相关文章

C++中class与struct的区别(struct的类型名同时可以作为变量名)

通常我们知道的区别: (一)默认继承权限.如果不明确指定,来自class的继承按照private继承处理,来自struct的继承按照public继承处理: (二)成员的默认访问权限.class的成员默认是private权限,struct默认是public权限. 除了这两点,class和struct基本就是一个东西.语法上没有任何其它区别. 昨天发现一个不知道算不算是区别的东西: struct的类型名同时可以作为变量名,显然class是不可以的,也可以理解,因为class各类型变量定义时直接是类名

swift中Any,AnyObject,AnyClass的区别

这几个概念让人很迷惑,看了很多帖子,终于搞明白了,简单总结: Any 和 AnyObject 是 Swift 中两个妥协的产物.什么意思呢,oc中有个id关键字,表示任何对象,oc和swift混编的时候拿什么对应id呢?就发明出来了AnyObject.但是!oc中的NSString,NSArray等都是class,但是在swift中String,Array都是struct,这个怎么办呢,混编的时候NSString等类型对应的id就不能用AnyObject了,为了填坑,又搞出来个Any,表示任意类

浅谈c++中class与struct的区别

本文主要讨论class与struct的区别.为什么是区别而不是共同点呢?因为在绝大部分情况下,class和struct其实是可以互相替换的, 那么区别到底有哪些呢,我总结了一下大概有如下3点: 1.成员的默认访问权限不同.如果我们使用struct关键字,则定义在第一个访问说明符之前的成员是public的:相反,如果我们使用class关键字,则这些成员是private的. class A //class { int x; public: A():x(0){} }; struct B<span st

c++中class与struct的区别

0. 结构是一种用关键字struct声明的自定义数据类型.与类相似,也可以包含构造函数,常数,字段,方法,属性,索引器,运算符和嵌套类型. 1.结构在堆栈中创建,是值类型,而类是引用类型.每当需要一种经常使用的类型,而且大多数情况下该类型只是一些数据时,使用结构能比使用类获得更佳性能. 2. struct 与class本质上应该是相同的,只是默认的访问权限不同(struct默认是public,class默认是private ) 3.结构不支持继承,即一个结构不能从另一个结构或类继承,而且不能作为

swift中 ?和 !的区别

可选类型(?)与强制解析运算符(!) ?是一种判断后再拆包的语法糖 !是一种强制拆包的语法糖 当你不确定有值的时候就可以用  ? 当你确定有值的时候可以用  ! ?的几种使用场景:1.声明Optional值变量2.用在对Optional值操作中,用来判断是否能响应后面的操作3.用于安全调用protocol的optional方法4.使用 as? 向下转型(Downcast) !的使用场景1.强制对Optional值进行拆包(unwrap)2.声明Implicitly Unwrapped Optio

Swift中as as! as?的区别

 as  :类型一致或者子类 仅当一个值的类型在运行时(runtime)和as模式右边的指定类型一致 - 或者是该类型的子类 - 的情况下,才会匹配这个值.如果匹配成功,被匹配的值的类型被转换成as模式左边指定的模式. class Animal {} class Dog: Animal {} let d = Dog() d as Animal  as! 父类强转子类 class Animal {} class Dog: Animal {} let a: Animal = Dog() a as!

Swift中的结构体,类,协议,扩展和闭包的用法以及? 和 !的区别

// MARK: - 1.结构体 //1.声明一个结构体 struct Rect {    // 声明结构体变量的属性(存储属性)    var x:Float    var y:Float    var width:Float    var height:Float    // 声明结构体属性,要使用static    static var description:String?        // 声明一个计算属性(是用来专门计算结构体变量属性的setter,和getter方法,其本身没有存

swift中的nil与Objective-C中的nil区别

1.OC中,只有对象才能设置为nil,而swift中除了对象,Int.struct.enum等任何可选类型都可以等于nil 2.OC中,nil是一个指向不存在对象的指针.swift中,nil不是指针,nil是个确定的值,用来表示值缺失. swift中的nil与Objective-C中的nil区别,布布扣,bubuko.com

c#中Class和Struct使用与性能的区别

1.Class为引用类型,Struct为值类型 值类型与引用类型的区别这两篇文章讲得很好 http://www.cnblogs.com/tonney/archive/2011/04/28/2032205.html http://blog.csdn.net/liulong1567/article/details/50678930 虽然我们在.net中的框架类库中,大多是引用类型,但是我们程序员用得最多的还是值类型. 引用类型如:string,Object,class等总是在从托管堆上分配的,C#中