1 为什么swift 推荐使用struct类型

在swift中是推荐使用struct类型的,值类型的变量在赋值的时候会自动进行一次低消耗的值拷贝

对比与对象的拷贝更加高效且不存在线程安全问题。

2 Struct 的概述

Swift语言中非常重视结构体,把结构体作为实现面向对象的重要手段。

Swift的Foundation 框架中,String,Array,Dictionary都是基于Struct实现的。

3 Struct 和 Class的区别

类和结构体都非常的类似,都具有定义和使用属性,方法,下标,构造器邓面向对象的特性,但是结构体不具有继承性,也不具备运行时强制类型转换等功能。

Class 是引用类型 (Reference Type)

Struct 是值类型 (Value Type)

简单的赋值方式:

a=b;

对于引用类型来讲的话,将a和b的指针指向同一块内存区域,此时改变a的值也会改变b的值

对于值类型来讲的话,是开辟新的内存给a,a和b是没有关系的两个变量,改变b不会改变a

class 为类型引用 struct为值引用

class Person{var name:String?;init(name:String?) {self.name = name;}
}// 创建一个学生
var studentA = Person.init(name: "tom");
var studentB = studentA;studentB.name = "Alex";
// 都打印Alex
print(studentA.name as Any);
print(studentB.name as Any);struct Dog{var name:String?;init(name:String?) {self.name = name;}
}var d1 = Dog.init(name: "tom");
var d2 = d1;
d2.name = "Jerry";
// 则d1 和 d2 的打印值不同
print(d1.name as Any);
print(d2.name as Any);

Struct 没有继承功能 Class 有继承功能

Swift 本质上来讲是面向协议的语言,Struct没有也不需要继承的功能,为了实现某个功能,只需要遵守一个并实现一个协议即可,从一个较高的层次来讲struct+protocol是构成swift面向协议语言的两个基石。

Struct 的特点

  • 1 安全性 值类型传递,自动线程安全

  • 2 内存,没有引用计数,不会因为循环引用从而导致内存泄漏

  • 3 速度 值类型通常是以栈的形式分配的,而不是用堆,比class 要为快

  • 4 方法中修改属性,需要添加mutating,而class 不需要

  • 5 序列化,不支持序列化,可以用字节转为NSData,而class支持序列化

1-Swift中的Struct 和 Class相关推荐

  1. 关于Swift中Struct,Class和Enum的哪些事儿

    前言 Swift type System Swift是强类型的,尽管只有六种类型. 命名类型: protocol, class , struct , enum 复合类型:tuple, function ...

  2. 在Swift中如何使用C中的Struct

    swift 无法直接访问 c 语言的Struct.只能通过指针的方式访问. ///-----例子1开始------- The c Lib API : mycapi.h <code style=& ...

  3. Swift 中枚举、结构体、类(enum、struct、class)

    Swift 中枚举.结构体.类(enum.struct.class) Swift中的枚举与OC相比不会自动分配初始值,值的类型不会限定为整数,可以给定关联值类型和具体值(整型.浮点型.字符型(Swif ...

  4. Swift中Class和Struct异同

    Swift 中类和结构体有很多共同点.共同处在于: 定义属性用于存储值 定义方法用于提供功能 定义下标操作使得可以通过下标语法来访问实例所包含的值 定义构造器用于生成初始化值 通过扩展以增加默认实现的 ...

  5. Swift中编写单例的正确方式

    本文由CocoaChina译者leon(社区ID)翻译自krakendev 原文:THE RIGHT WAY TO WRITE A SINGLETON 转载请保持所有内容和链接的完整性. 在之前的帖子 ...

  6. Swift中依赖注入的解耦策略

    原文地址:Dependency Injection Strategies in Swift 简书地址:Swift中依赖注入的解耦策略 今天我们将深入研究Swift中的依赖注入,这是软件开发中最重要的技 ...

  7. 在 Swift 中使用闭包实现懒加载

    本文讲的是在 Swift 中使用闭包实现懒加载, 原文地址:Swift Lazy Initialization with Closures 原文作者:Bob Lee 译文出自:掘金翻译计划 译者:ls ...

  8. Swift中的选项集合

    Swift3中的选项集合(Option Set) 作者:Ole Begemann,原文链接,原文日期:2016/09/28 译者:Lanford3_3:校对:saitjr:定稿:CMB 选项集合在OC ...

  9. Swift中的全局常量文件

    本文翻译自:Global constants file in Swift In my Objective-C projects I often use a global constants file ...

最新文章

  1. 《LeetCode力扣练习》第3题 C语言版 (做出来就行,别问我效率。。。。)
  2. mysql delete in 结果集_MySQL从删库到跑路(2)SQL语句示例
  3. JZOJ 1321. 灯
  4. 如何写好一篇高质量的IEEE/ACM Transaction级别的计算机科学论文?——顶刊与顶会的区别...
  5. 处理程序“ExtensionlessUrlHandler-Integrated-4.0”在其模块列表中有一个错误模块“ManagedPipelineHandler”...
  6. doxygen问题集锦
  7. 矩阵快速幂的最简单用法
  8. 电脑录屏工具_这四款录屏工具,也许是电脑录屏软件中免费、无广告且最实用的,程序员必备...
  9. Excel 中批量处理数据(改成 json 格式)
  10. 深圳大学计算机与软件学院李志,李志彬
  11. CISSP 考证进度篇(持续监督中)
  12. 【C语言】C语言实现strcmp库函数
  13. Freeswitch 怎么配置 Proxy Media 和 bypass 模式
  14. ##稻盛和夫的名言##
  15. Ceph Async RDMA网络通信性能优化
  16. 特征点匹配——SIFT算法详解
  17. ArcGIS打开影像图显示全黑色解决办法
  18. javaweb羽毛球教练场地预约管理系统ssm
  19. CTO问我,为什么需要API网关?
  20. 动手组装一台 macbook pro 15寸(a1398模具,rmbp mjlq2/mjlt2)

热门文章

  1. [转]mysql 数据类型
  2. 【Android动画】之Tween动画 (渐变、缩放、位移、旋转)
  3. [sinatra] Just Do It: Learn Sinatra, Part One Darren Jones
  4. activity 的属性android:taskAffinity和android:allowTaskReparenting
  5. python基础学习-5(包与模块)
  6. python-opencv 定位识别读表
  7. OpenCV4Android开发实录(2): 使用OpenCV3.4.1库实现人脸检测
  8. php fsockopen解决办法
  9. 提供前进、后退功能及其他JAVASCRIPT速成秘诀
  10. 二维码Data Matrix编码、解码使用举例