Swift中变量声明和定义的区别
Posted
技术标签:
【中文标题】Swift中变量声明和定义的区别【英文标题】:Difference between variable declaration and definition in Swift 【发布时间】:2015-07-23 07:08:36 【问题描述】:“声明”和“定义”这两个词在 Apple 的 Swift 文档中被用作同义词,这让我感到困惑。
在“初始化”部分(讨论类初始化器)下,Apple 声明:
您可以在初始化程序中为存储的属性设置初始值,或者通过将默认属性值指定为属性定义的一部分。
他们在小节中进一步说明:
您可以在初始化程序中设置存储属性的初始值,如上所示。或者,将默认属性值指定为属性声明的一部分。
我认为变量声明与变量定义不同。
【问题讨论】:
【参考方案1】:你说得对,这两个含义不同,尽管我认为大多数人只是以相同的含义使用它们,我认为那些 AppleDocs 也是如此。 Here is great article 主题:
总结
声明提供符号的基本属性:它的类型和它的 姓名。定义提供了该符号的所有细节——如果它是 一个函数,它的作用;如果它是一个类,它是什么字段和方法 拥有;如果它是变量,则存储该变量。通常, 编译器只需要声明某事即可 将文件编译成目标文件,期望链接器能找到 来自另一个文件的定义。如果没有源文件定义过 符号,但它已声明,您将在链接时收到错误 抱怨未定义的符号。
【讨论】:
很高兴能得到一些以英语为母语的人的确认,但我不是;也许我在文档中遗漏了一些可以区分它的细微差别。【参考方案2】:在网上搜索了很多合理的解释后,我似乎找到了答案:
问题在于这两个术语在某种程度上重叠。定义也用作声明,因为它们将某种类型的标识符注入到作用域中。但是,声明不是定义,因为它不需要为声明的对象分配存储空间。更令人困惑的是,定义和声明的语义在应用于类型和函数时略有不同,正如我将立即展示的那样。那么让我们来看看这两个术语的更详细的分析。
这里是文章:Declarations and Definitions。
文章给出了进一步的解释和例子。
【讨论】:
【参考方案3】:变量的声明意味着告诉编译器它们是特定数据类型的 var\funct\struct。变量的定义意味着要求编译器为变量分配内存或为该变量定义存储。一个变量只能定义一次,但可以声明任意多次。
【讨论】:
【参考方案4】:我认为Apple's Swift 4 Language Reference 可以理解为权威答案。来自Declarations 部分(重点是我的):
声明在您的程序中引入了一个新名称或结构。 例如,您使用声明来引入函数和方法, 变量和常量,并定义新的命名枚举, 结构、类和协议类型。您也可以使用声明 扩展现有命名类型的行为并导入符号 到您在其他地方声明的程序中。
在 Swift 中,大多数声明也是定义 它们同时被实现或初始化 宣布。也就是说,因为协议没有实现它们的成员, 大多数协议成员只是声明。为了方便和 因为区别在 Swift 中并不那么重要 ,这个术语 声明涵盖声明和定义。
【讨论】:
以上是关于Swift中变量声明和定义的区别的主要内容,如果未能解决你的问题,请参考以下文章