Tag: 集合类型

Swift编程入门第2部分—值类型,引用类型,指针和集合类型

之前,我们讨论过变量,常量和类型。 开始Swift编程第1部分-变量,常量和类型 我知道那里有很多教程,Apple有很好的学习Swift的资源,包括他们的WWDC视频…… medium.com 在这一部分中,我们将讨论几个特殊类型,但是为了深入实现这一点,我们必须首先讨论值类型,引用类型和指针。 提醒一句,指针可能是最难掌握的概念之一,我会尽力而为。 初步的东西 是的,我们上次这样做,现在我们将再次进行。 上一次我们讨论了内存以及它如何以块,字节和位的形式排列。 我想在这里对此进行扩展,并为您提供一些有关内存工作原理的直观表示。 让我们创建一个包含值Hello的字符串。 我们之前没有做过什么特别的事情。 我在上一篇文章中告诉您,内存具有价值。 如果我们可以看一下该内存,它将像这样存储: 我敢打赌,您要问的是\0在字符串的末尾。 这称为空终止符。 斜线表示程序已准备好执行命令,零表示没有任何意义。 这是字符串值的存储方式,并在字符串允许使用空格的同时让程序知道字符串何时完成。 数字略有不同。 数字存储为二进制数字。 二进制很容易理解,从内存块最右边的1开始,向左移动,每次将当前值乘以2。 如果您对图形卡或记忆棒有所了解,这就是为什么我们会看到8位(Atari,NES),16位(Sega Genesis,SNES),32位(PlayStation),64位(Nintendo 64)和以此类推。 在二进制中,如果位置为0,则表示关闭,这是错误的。 如果位置为1,则为开或为true。 基于此逻辑,我们只需要计算位置为1的位置即可。 您能找出上图中的数字吗? 现在,这是一组8位内存,是的,它是一个完整的内存字节。 之前我说过字符串中的每个字符都是2个字节,这意味着我们使用16位来存储字符。 16位二进制文​​件的最大值为256。但是,当我们谈论位置时,我们总是从0开始。因此16位二进制数的范围是0-255 。 我敢打赌,您在问我们如何才能使字符超出此范围。 好吧,在这种情况下,我将带您到ASCII表,您可以在其中查看自己的值。 您甚至还会看到隐藏的字符,例如空终止符/0如上所示。 内存将值存储在静态内存中,该位置称为stack ,而该位置称为堆。 可以快速访问静态内存和堆栈内存,但是从堆访问内容的速度很慢(以计算机时间计)。 尽管对您来说似乎并不慢,但从堆栈加载可能要花费一毫秒或更短的时间,而从堆加载可能要花费10毫秒。 在介绍事物时,我将解释它们的实现位置,以便您以后知道将其放置在何处。 值类型 值类型很容易学习,这就是我们自然地思考事物的方式。 当您描述某些事物时,例如说一个高尔夫球,您可能会说一个高尔夫球很小,或者一个篮球是橙色。 值类型是包含您要查找的值的内存。 如果您将值8存储在内存中,然后再要求输入该值,则会收到数字8,非常简单,对吧? 字符串,整数,双精度型,浮点型和布尔型都是值类型,还有更多,但是我们还没有涉及它们,到目前为止,我所有的例子都是值类型。 值类型存储在堆栈中。 如果在它们前面添加静态元素,那么它们会添加到静态内存中,而不仅仅是在各处都这样做,这会带来另一个问题,我将在后面讨论。 参考类型和指针 引用类型在某种程度上类似于值类型,因为它们可以为您提供与值类型相同的值,但它们可以为您提供更多的价值。 引用类型使用指针为您提供所需的值。 之所以要准备这么长的篇幅,主要是因为本节有保证。 如果您看一下C和Objective-C程序,您会发现到处都使用了指针,看起来像这样 集合类型 继续本部分的最后一部分。 […]