var类型中的地址/指针分配在swift中

时间:2017-05-11 12:36:52

标签: swift

我是Swift的新手,我刚刚开始学习它,我怀疑这是在杀死我的想法,如果swift是纯粹的面向对象的语言,并且swift中的每一件事都是对象,所以如果我写的话

var aValue = 2  //step 1
var bValue = 5  //step 2

这意味着变量a和b应该被视为保持Int类型的对应值2和5的引用,所以在此之后如果我写

aValue = bValue   //step 3
aValue = 0   //step 4

然后将bValue的step-3语句地址分配给变量aValue,因此aValue和bValue都应该指向同一个对象( 例如,如果这是用java编写的,并且每个带有aValue的操作都应该影响bValue(因为它们指向同一个对象)意味着bValue应该在步骤之后具有值0 aValue = 0bValue = 0 -4但实际上bValue的对象被复制到aValue并且它们彼此独立处理,以便发生这种情况

任何人都可以解释这个!

4 个答案:

答案 0 :(得分:0)

检查Apple Documentation

  

在Swift中,有许多基本数据类型,如String,Array和Dictionary   被实现为结构。这意味着数据,如字符串,   数组和字典在分配给新数据时会被复制   常量或变量,或者传递给函数或方法时。

     

此行为与Foundation不同:NSString,NSArray和   NSDictionary实现为类,而不是结构。弦乐,   始终分配和传递Foundation中的数组和字典   作为对现有实例的引用,而不是作为副本。

答案 1 :(得分:0)

Swift有两种不同的类型;引用类型和值类型。你可以在这里阅读它们https://developer.apple.com/swift/blog/?id=10但简而言之,int是值类型,因此在写入时被复制,因此当你将bvalue的值赋给avalue时,bvalue被复制,因此两个vars仍然是“独立的”。

答案 2 :(得分:0)

在Swift中,有值类型和引用类型。通常,结构是值类型,而类是引用类型。 Swift中的大多数原始类型(如Int)都是使用结构实现的,因此它们是值类型。 请参阅official blog post有关值和参考类型的信息。

答案 3 :(得分:0)

var aValue = 2  //step 1
var bValue = 5  //step 2

这两个变量都称为值类型。这意味着它们都具有唯一的内存地址,如果您要将值更改为其中任何一个,它都不会影响所有内容。

aValue = bValue   //step 3 - bValue is copied to aValue
aValue = 0   //step 4 -  Changes aValue, not bbValue