以更好地理解语言为目标的快速提问:
我了解var
和let
var
是可变的
let
是最终的
我假设这两个都被写入堆栈。创建变量后,将设置它存储的对象类。是否有可能改变这一点?
let myVar = String("Hello")
// myVar.dynamicType is String
myVar.delete
let myVar = Int(123)
myVar.dynamicType is Int
有没有办法为变量重新分配内存?我想在代码的不同部分使用相同的变量名来表示不同的东西。
答案 0 :(得分:1)
Swift中的标识符(常量和可变)与大多数其他静态类型检查编程语言一样,具有范围(参见Wikipedia entry),定义了它们的有效程度。范围可以是函数体,文件,模块,也可以是for
循环的主体。在像Swift这样的语言中,您不能为同一范围内的两个不同值或内存单元重用相同的标识符,但您可以在两个不同的范围内执行此操作。因此,您的问题的答案是:您不能在同一范围内执行此操作,但您可以在不同的范围内执行此操作。但是请注意,您没有使用相同的内存,只是与不同内存(如果是var
)或不同内存相关联的名称值(在let
的情况下)。
实际上你不能delete
也不能与标识符相关联的值,也不能是内存本身(因为你认为在你的例子中你认为可能)。这在具有堆栈分配实体的任何语言中都是不可能的,因为从堆栈中恢复是在当前代码块的末尾自动进行的。