我是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 = 0
和bValue = 0
-4但实际上bValue的对象被复制到aValue并且它们彼此独立处理,以便发生这种情况
任何人都可以解释这个!
答案 0 :(得分:0)
在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