diff --git a/source/chapter3/05_Declarations.md b/source/chapter3/05_Declarations.md index 6e4e44bf..3b6a959d 100755 --- a/source/chapter3/05_Declarations.md +++ b/source/chapter3/05_Declarations.md @@ -153,9 +153,9 @@ println("The second number is \(secondNumber).") 你可以在全局,函数内,或者在类和结构体的声明(context)中使用这种形式来声明一个变量。当变量以这种形式 在全局或者一个函数内被声明时,它代表一个存储型变量。当它在类或者结构体中被声明时,它代表一个存储型变量属性。 -构造器表达式可以被 +初始化的表达式不可以在协议(protocol)的定义中出现,在其他情况下,初始化表达式是可选的(optional),如果没有初始化表达式,那么变量定义时必须显示的声明变量类型(:type) -和常量声明相比,如果变量名是一个元祖类型,元祖的每一项的名字都要和初始化表达式一致。 +对于常量的定义,如果名字是一个元祖(tuple),元祖每一项的`name`都要和初始化表达式`expression`中的相应值一致。 正如名字一样,存储型变量的值或存储型变量属性存储在内存中。 @@ -181,7 +181,7 @@ getter用来读取变量值,setter用来写入变量值。setter子句是可 但是如果你提供了一个setter语句,你也必需提供一个getter语句。 setter的名字和圆括号内的语句是可选的。如果你写了一个setter名,它就会作为setter的参数被使用。如果你不写setter名, -setter的初始名为newValue,正如在seter声明速记(shorthand setter declaration)中提到的那样。 +setter的初始名为newValue,正如在setter声明速记(shorthand setter declaration)中提到的那样。 不像存储型变量和存储型属性那样,计算型属性和计算型变量的值不存储在内存中。 @@ -211,7 +211,7 @@ setter的初始名为newValue,正如在seter声明速记(shorthand setter decl 所有包含监视器的变量声明都必须有类型注释(type annotation)。 当变量或属性的值被改变时,willset和didset监视器提供了一个监视方法(适当的回应)。 -监视器不会在变量或属性第一次初始化时不会被运行,它们只有在值被外部初始化语句改变时才会被运行。 +监视器不会在变量或属性第一次初始化时运行,它们只有在值被外部初始化语句改变时才会被运行。 willset监视器只有在变量或属性值被改变之前运行。新的值作为一个常量经过过willset监视器,因此不可以在 willset语句中改变它。didset监视器在变量或属性值被改变后立即运行。和willset监视器相反,为了以防止你仍然 @@ -259,7 +259,7 @@ class关键字用来声明类的计算型属性。static关键字用来声明类 > `typealias name` = `existing type` -当一个类型被别名被声明后,你可以在你程序的任何地方使用别名来代替已存在的类型。已存在的类型可以是已经被命名的 +当声明一个类型的别名后,你可以在你程序的任何地方使用别名来代替已存在的类型。已存在的类型可以是已经被命名的 类型或者是混合类型。类型的别名不产生新的类型,它只是简单的和已存在的类型做名称替换。 查看更多Protocol Associated Type Declaration. @@ -286,7 +286,7 @@ class关键字用来声明类的计算型属性。static关键字用来声明类 > `statements` > } -每个参数的类型都要标明,它们不能被推断出来。初始时函数的参数是常值。在这些参数前面添加var使它们成为变量, +每个参数的类型都要标明,它们不能被推断出来。初始时函数的参数是常量。在这些参数前面添加var使它们成为变量, 作用域内任何对变量的改变只在函数体内有效,或者用inout使的这些改变可以在调用域内生效。 更多关于in-out参数的讨论,参见in-out参数(in-out parameters) @@ -349,8 +349,8 @@ c.f(7, y: "hello") // x没有名称,y有名称 且必须是最后一个参数。可变参数被作为该基本类型名的数组来看待。举例来讲,可变参数int...被看做是int[]。 查看可变参数的使用例子,详见可变参数(variadic parameters)一节。 -在参数的类型后面有一个以等号(=)连接的表达式,这样的参数被看做有着给定表达式的初试值。如果参数在函数 -调用时被省略了,就会使用初始值。如果参数没有胜率,那么它在函数调用是必须有自己的名字.举例来讲, +在参数的类型后面有一个以等号(=)连接的表达式,这样的参数被看做有着给定表达式的初始值。如果参数在函数 +调用时被省略了,就会使用初始值。如果参数没有省略,那么它在函数调用是必须有自己的名字.举例来讲, f()和f(x:7)都是只有一个变量x的函数的有效调用,但是f(7)是非法的,因为它提供了一个值而不是名称。 ###特殊方法 @@ -362,7 +362,7 @@ f()和f(x:7)都是只有一个变量x的函数的有效调用,但是f(7)是非 和类型相关而不是和类型实例相关的方法必须在static声明的结构以或枚举内,亦或是以class关键字定义的类内。 -###柯里化函数和方法 +###柯里化函数和方法(Curried Functions and Methods) 柯里化函数或方法有着如下的形式: @@ -370,7 +370,7 @@ f()和f(x:7)都是只有一个变量x的函数的有效调用,但是f(7)是非 > `statements` > } -以这种形式定义的函数的返回值是另一个函数。举例来说,下面的两个声明时等价的: +以这种形式定义的函数的返回值是另一个函数。举例来说,下面的两个声明是等价的: ```swift func addTwoNumbers(a: Int)(b: Int) -> Int { @@ -546,8 +546,8 @@ ExampleEnum.D的值会自动增长为6. 一个类只能继承一个父类,超类,但是可以包含任意数量的协议。这些超类第一次在type-inheritance-clause出现,遵循任意协议。 -正如在初始化声明(Initializer Declaration)谈及的那样,类可以有指定和方便的构造器。当你声明任一中构造器时, -你可以使用requierd变量来标记构造器,要求任意子类来重写它。指定类的构造器必须初始化类所有的已声明的属性, +正如在初始化声明(Initializer Declaration)谈及的那样,类可以有指定(designated)和方便(convenience)构造器。当你声明任一种构造器时, +你可以使用required变量来标记构造器,要求任意子类来重写它。指定类的构造器必须初始化类所有的已声明的属性, 它必须在子类构造器调用前被执行。 类可以重写属性,方法和它的超类的构造器。重写的方法和属性必须以override标注。