SWIFT语言 声明

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Swift语言:声明一条声明可以在你的程序里引入新的名字和构造。举例来说,你可以使用声明来引入函数和方法,变量和常量,或者来定义新的命名好的枚举,结构,类和协议类型。你也可以使用一条声明来延长一个已经存在的命名好的类型的行为。或者在你的程序里引入在其他地方声明的符号。在swift中,大多数声明在某种意义上讲也是执行或同事声明它们的初始化定义。这意味着,因为协议和他们的成员不匹配,大多数协议成员需要单独的声明。为了方便起见,也因为这些区别在swift里不是很重要,声明语句同时包含了声明和定义。GRAMMAROFADECLARATIONdeclaration→import-declarationdeclaration→constant-declarationdeclaration→variable-declarationdeclaration→typealias-declarationdeclaration→function-declarationdeclaration→enum-declarationdeclaration→struct-declarationdeclaration→class-declarationdeclaration→protocol-declarationdeclaration→initializer-declarationdeclaration→deinitializer-declarationdeclaration→extension-declarationdeclaration→subscript-declarationdeclaration→operator-declarationdeclarations→declarationdeclarationsoptdeclaration-specifiers→declaration-specifierdeclaration-specifiersoptdeclaration-specifier→class|mutating|nonmutating|override|static|unowned|模块范围模块范围定义了对模块中其他源文件可见的代码。(注:待改进)在swift的源文件中,最高级别的代码由零个或多个语句,声明和表达组成。变量,常量和其他的声明语句在一个源文件的最顶级被声明,使得他们对同一模块中的每个源文件都是可见的。GRAMMAROFATOP-LEVELDECLARATIONtop-level-declaration→statementsopt代码块代码块用来将一些声明和控制结构的语句组织在一起。它有如下的形式:{`statements`}代码块中的语句包括声明,表达式和各种其他类型的语句,它们按照在源码中的出现顺序被依次执行。GRAMMAROFACODEBLOCKcode-block→statementsopt引入声明引入声明使你可以使用在其他文件中声明的内容。引入语句的基本形式是引入整个代码模块;它由import关键字开始,后面紧跟一个模块名:importmodule你可以提供更多的细节来限制引入的符号,如声明一个特殊的子模块或者在一个模块或子模块中做特殊的声明。(待改进)当你使用了这些细节后,在当前的程序汇总只有引入的符号是可用的(并不是声明的整个模块)。importimportkindmodule.symbolnameimportmodule.submoduleGRAMMAROFANIMPORTDECLARATIONimport-declaration→attributesoptimportimport-kindoptimport-pathimport-kind→typealias|struct|class|enum|protocol|var|funcimport-path→import-path-identifierimport-path-identifier.import-pathimport-path-identifier→identifieroperator常量声明常量声明可以在你的程序里命名一个常量。常量以关键词let来声明,遵循如下的格式:letconstantname:type=expression当常量的值被给定后,常量就将常量名称和表达式初始值不变的结合在了一起,而且不能更改。这意味着如果常量以类的形式被初始化,类本身的内容是可以改变的,但是常量和类之间的结合关系是不能改变的。当一个常量被声明为全局变量,它必须被给定一个初始值。当一个常量在类或者结构体中被声明时,他被认为是一个常量属性。常量并不是可计算的属性,因此不包含getters和setters。(译者注:getters和setters不知道怎么翻译,待改进)如果常量名是一个元祖形式,元祖中的每一项初始化表达式中都要有对应的值let(firstNumber,secondNumber)=(10,42)在上例中,firstNumber是一个值为10的常量,secnodeName是一个值为42的常量。所有常量都可以独立的使用:1println(Thefirstnumberis\(firstNumber).)2//printsThefirstnumberis10.3println(Thesecondnumberis\(secondNumber).)4//printsThesecondnumberis42.类型注释(:type)在常量声明中是一个可选项,它可以用来描述在类型接口(typeinference)中找到的类型。声明一个静态常量要使用关键字static。静态属性在类型属性(typepropetries)中有介绍。如果还想获得更多关于常量的信息或者想在使用中获得帮助,请查看常量和变量(constantsandvariables),存储属性(storedproperties)等节。GRAMMAROFACONSTANTDECLARATIONconstant-declaration→attributesoptdeclaration-specifiersoptletpattern-initializer-listpattern-initializer-list→pattern-initializer|pattern-initializer,pattern-initializer-listpattern-initializer→patterninitializeroptinitializer→=expression变量声明变量声明可以在你的程序里声明一个变量,它以关键字var来声明。根据声明变量类型和值的不同,如存储和计算变量和属性,存储变量和属性监视,和静态变量属性,有着不同的声明形式。(待改进)所使用的声明形式取决于变量所声明的范围和你打算声明的变量类型。注意:你也可以在协议声明的上下文声明属性,详情参见类型属性声明。存储型变量和存储型属性下面的形式声明了一个存储型变量或存储型变量属性varvariablename:type=expression你可以在全局,函数内,或者在类和结构体的声明(context)中使用这种形式来声明一个变量。当变量以这种形式在全局或者一个函数内被声明时,它代表一个存储型变量。当他在类或者结构体中被声明时,他代表一个存储型变量属性。构造器表达式可以被和常量声明相比,如果变量名是一个元祖类型,元祖的每一项的名字都要和初始化表达式一致。正如名字一样,存储型变量的值或存储型变量属性存储在内存中。计算型变量和计算型属性如下形式声明一个一个存储型变量或存储型属性:varvariablename:type{get{statements}set(settername){statements}}你可以在全局,函数体内或者类,结构体,枚举,扩展声明的上下文中使用这种形式的声明。当变量以这种形式在全局或者一个函数内被声明时,它代表一个计算型变量。当他在类,结构体,枚举,扩展声明的上下文中中被声明时,他代表一个计算型变量属性。getter用来读取变量值,setter用来写入变量值。setter子句是可选择的,只有getter是必需的,你可以将这些语句都省略,只是简单的直接返回请求值,正如在只读计算属性(read-onlycomputedproperites)中描述的那样。但是如果你提供了一个setter语句,你也必需提供一个getter语句。setter的名字和圆括号内的语句是可选的。如果你写了一个setter名,它就会作为setter的参数被使用。如果你不写setter名,setter的初始名为newValue,正如在seter声明速记(shorthandsetterdeclaration)中提到的那样。不像存储型变量和存储型属性那样,计算型属性和计算型变量的值不存储在内存中。获得更多信息,查看更多关于计算型属性的例子,请查看计算型属性(computedproperties)一节。存储型变量监视器和属性监视器你可以用willset和didset监视器来声明一个存储型变量或属性。一个包含监视器的存储型变量或属性按如下的形式声明:varvariablename:type=expression{willSet(settername){statements}didSet(settername{statements}}你可以在全局,函数体内或者类,结构体,枚举,扩展声明的上下文中使用这种形式的声明。当变量以这种形式在全局或者一个函数内被声明时,监视器代表一个存储型变量监视器;当他在类,结构体,枚举,扩展声明的上下文中被声明时,监视器代表属性监视器。你可以为适合的监视器添加任何存储型属性。你也可以通过重写子类属性的方式为适合的监视器添加任何继承的属性(无论是存储型还是计算型的),参见重写属性监视器(overridingproperytobservers)。初始化表达式在类或者结构体的声明中是可选的,但是在其他地方是必需的。无论在什么地方声明,所有包含监视器的变量声明都必须有类型注释(typeannotation)。当变量或属性的值被改变时,willset和didset监视器提供了一个监视方法(适当的回应)。监视器不会在变量或属性第一次初始化时不会被运行,他们只有在值被外部初始化语句改变时才会被运行。willset监视器只有在变量或属性值被改变之前运行。新的值作为一个常量经过过willset监视器,因此不可以在willset语句中改变它。didset监视器在变量或属性值被改变后立即运行。和willset监视器相反,为了以防止你仍然需要获得旧的数据,旧变量值或者属性会经过didset监视器。这意味着,如果你在变量或属性自身的didiset监视器语句中设置了一个值,你设置的新值会取代刚刚在willset监视器中经过的那个值。在willset和didset语句中,setter名和圆括号的语句是可选的。如果你写了一个setter名,它就会作为willset和didset的参数被使用。如果你不写setter名,willset监视器初始名为newvalue,didset监视器初始名为oldvalue。当你提供一个willset语句时,didset语句是可选的。同样的,在你提供了一个didset语句时,willset语句是可选的。获得更多信息,查看如何使用属性监视器的例子,请查看属性监视器(prppertyobservers)一节。类和静态变量属性class关键字用来声明类的计算型属性。static关键字用来声明类的静态变量属性。类和静态变量在类型属性(typeproperties)中有详细讨论。GRAMMAROFAVARIABLEDECLARATIONvariable-declaration→variable-declaration-headpattern-initializer-listvariable-declaration→variable-declaration-hea

1 / 38
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功