Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift中变量声明和定义的区别_Ios_Swift_Initialization_Initializer - Fatal编程技术网

Ios Swift中变量声明和定义的区别

Ios Swift中变量声明和定义的区别,ios,swift,initialization,initializer,Ios,Swift,Initialization,Initializer,“声明”和“定义”这两个术语在苹果的Swift文档中被同义使用,这让我感到困惑 在“初始化”部分(讨论类初始值设定项),Apple声明: 可以在初始值设定项中为存储的属性设置初始值,也可以将默认属性值指定为属性的定义的一部分 此外,在一个小节中,他们指出: 可以从初始值设定项中设置存储属性的初始值,如上所示。或者,在属性的声明中指定默认属性值 我认为变量声明不同于变量定义 你是对的,这两个词的意思是不同的,尽管我认为大多数人只是以相同的意思使用这两个词,我认为那些appledoc也是如此。关于主

“声明”和“定义”这两个术语在苹果的Swift文档中被同义使用,这让我感到困惑

在“初始化”部分(讨论类初始值设定项),Apple声明:

可以在初始值设定项中为存储的属性设置初始值,也可以将默认属性值指定为属性的定义的一部分

此外,在一个小节中,他们指出:

可以从初始值设定项中设置存储属性的初始值,如上所示。或者,在属性的声明中指定默认属性值


我认为变量声明不同于变量定义

你是对的,这两个词的意思是不同的,尽管我认为大多数人只是以相同的意思使用这两个词,我认为那些appledoc也是如此。关于主题:

摘要

声明提供了符号的基本属性:类型和属性 名称定义提供了该符号的所有细节——如果是 一个函数,它做什么;如果它是一个类,它包含哪些字段和方法 有如果它是一个变量,那么该变量存储在哪里。通常情况下 编译器只需要有一个声明就可以 将文件编译为对象文件,期望链接器能够找到 来自另一个文件的定义。如果没有源文件定义 符号,但它已声明,您将在链接时收到错误 抱怨未定义的符号


在网上搜索了很多合理的解释之后,我似乎找到了一个答案:

问题是这两个术语在某种程度上重叠。定义还充当声明,因为它们将特定类型的标识符注入范围。但是,声明不是定义,因为它不需要为声明的对象分配存储。更让人困惑的是,当应用于类型和函数时,定义和声明的语义略有不同,我将马上说明这一点。让我们来看看这两个术语的更详细的分析

以下是文章:


本文给出了进一步的解释和示例。

声明变量的平均值,告诉编译器它们是特定数据类型的var\funct\struct。变量的定义意味着要求编译器为变量分配内存或为该变量定义存储。你只能定义一个变量一次,但是你可以任意多次声明它。

我认为这可以解释为权威的答案。从该部分(我的重点):

声明将在程序中引入新名称或结构。 例如,使用声明来引入函数和方法, 变量和常量,以及定义新的命名枚举, 结构、类和协议类型。您还可以使用声明 扩展现有命名类型的行为并导入符号的步骤 在其他地方声明的程序中

在Swift中,大多数声明也是定义 它们在执行的同时被实现或初始化 宣布。也就是说,因为协议不实现其成员, 大多数协议成员只是声明。为了方便和 因为在Swift这个术语中,区别并不是那么重要 声明包括声明和定义


如果能得到某个以英语为母语的人的确认,那就太好了,而我不是;也许我在文档中遗漏了一些可以区分它的细微差别。