首页 理论教育 值语义 VS 引用语义:Swift中String的实现机制

值语义 VS 引用语义:Swift中String的实现机制

时间:2023-06-23 理论教育 版权反馈
【摘要】:可以先看一个示例:动手写7.6.1 ValueString控制台输出如下:控制台输出如下:str赋值给了valueString,对valueString增加了一段“add new String”字符串,但是当打印的时候发现只有valueString变了,而str没有变,这是为什么呢?在本例中,str变量的值赋给valueString变量时,只是拷贝了一份str中的字符串赋给了valueString。String在Swift的世界中被定义为一个struct类型,即结构体。接下来让我们看看引用语义的工作原理,以便更好地理解在什么时候使用引用类型。

值语义 VS 引用语义:Swift中String的实现机制

可以先看一个示例:

动手写7.6.1 ValueString

控制台输出如下:

控制台输出如下:

str赋值给了valueString,对valueString增加了一段“add new String”字符串,但是当打印的时候发现只有valueString变了,而str没有变,这是为什么呢?按住“Command+Control”组合键后再用鼠标左键单击“String”,我们便可以阅读苹果提供的String的声明文件了:

str赋值给了valueString,对valueString增加了一段“add new String”字符串,但是当打印的时候发现只有valueString变了,而str没有变,这是为什么呢?按住“Command+Control”组合键后再用鼠标左键单击“String”,我们便可以阅读苹果提供的String的声明文件了:(www.xing528.com)

String在Swift的世界中被定义为一个struct类型,即结构体。即String其实是一个值类型,而值类型在被赋值给其他变量或者作为参数传递给函数时,实际上只是一份拷贝,这是需要读者注意的。在本例中,str变量的值赋给valueString变量时,只是拷贝了一份str中的字符串赋给了valueString。而对valueString进行修改,也只是修改了拷贝的字符串,并没有影响到str变量所对应的那个实例,两者不是同一个实例。

Swift提供的基本类型(Int、String)和容器(Array、Dictionary)大部分都是用结构体实现的,也就是说它们被赋给其他变量或传递给函数作为参数时,都是被拷贝的,因为它们都是值类型。Swift在自身提供的类型上大量地使用了结构体这种值类型,也能从侧面体现Swift的设计理念和函数式编程的思想。建议读者在大部分时候使用struct进行自定义类型的定义,只在必要的时候才使用class。接下来让我们看看引用语义的工作原理,以便更好地理解在什么时候使用引用类型。

String在Swift的世界中被定义为一个struct类型,即结构体。即String其实是一个值类型,而值类型在被赋值给其他变量或者作为参数传递给函数时,实际上只是一份拷贝,这是需要读者注意的。在本例中,str变量的值赋给valueString变量时,只是拷贝了一份str中的字符串赋给了valueString。而对valueString进行修改,也只是修改了拷贝的字符串,并没有影响到str变量所对应的那个实例,两者不是同一个实例。

Swift提供的基本类型(Int、String)和容器(Array、Dictionary)大部分都是用结构体实现的,也就是说它们被赋给其他变量或传递给函数作为参数时,都是被拷贝的,因为它们都是值类型。Swift在自身提供的类型上大量地使用了结构体这种值类型,也能从侧面体现Swift的设计理念和函数式编程的思想。建议读者在大部分时候使用struct进行自定义类型的定义,只在必要的时候才使用class。接下来让我们看看引用语义的工作原理,以便更好地理解在什么时候使用引用类型。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈