资源预览内容
第1页 / 共36页
第2页 / 共36页
第3页 / 共36页
第4页 / 共36页
第5页 / 共36页
第6页 / 共36页
第7页 / 共36页
第8页 / 共36页
第9页 / 共36页
第10页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Swift 语言:声明一条声明可以在你的程序里引入新的名字和构造。举例来说,你可以使用声明来引入函数和方法,变量和常量,或者来定义 新的命名好的枚举,结构,类和协议类型。你也可以使用一条声明来延长一个已经存在的命名好的类型的行为。或者在你的 程序里引入在其他地方声明的符号。在 swift 中,大多数声明在某种意义上讲也是执行或同事声明它们的初始化定义。这意味着,因为协议和他们的成员不匹配, 大多数协议成员需要单独的声明。为了方便起见,也因为这些区别在 swift 里不是很重要,声明语句同时包含了声明和定义。GRAMMAR OF A DECLARATIONdeclaration 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 的源文件中,最高级别的代码由零个或多个语句, 声明和表达组成。变量,常量和其他的声明语句在一个源文件的最顶级被声明,使得他们对同一模块中的每个源文件都是可见的。GRAMMAR OF A TOP-LEVEL DECLARATIONtop-level-declaration statements opt代码块代码块用来将一些声明和控制结构的语句组织在一起。它有如下的形式: statements 代码块中的语句包括声明,表达式和各种其他类型的语句,它们按照在源码中的出现顺序被依次执行。GRAMMAR OF A CODE BLOCKcode-block statements opt引入声明引入声明使你可以使用在其他文件中声明的内容。引入语句的基本形式是引入整个代码模块;它由 import 关键字开始,后面 紧跟一个模块名:import module你可以提供更多的细节来限制引入的符号,如声明一个特殊的子模块或者在一个模块或子模块中做特殊的声明。(待改进) 当你使用了这些细节后,在当前的程序汇总只有引入的符号是可用的(并不是声明的整个模块)。import import kind module.symbol name import module.submoduleGRAMMAR OF AN IMPORT DECLARATIONimport-declaration attributes opt import import-kind opt import-path import-kind typealias | struct | class | enum | protocol | var | func import-path import-path-identifier import-path-identifier.import-path import-path-identifier identifier operator常量声明常量声明可以在你的程序里命名一个常量。常量以关键词 let 来声明,遵循如下的格式:let constant name: type = expression当常量的值被给定后,常量就将常量名称和表达式初始值不变的结合在了一起,而且不能更改。 这意味着如果常量以类的形式被初始化,类本身的内容是可以改变的,但是常量和类之间的结合关系是不能改变的。 当一个常量被声明为全局变量,它必须被给定一个初始值。当一个常量在类或者结构体中被声明时,他被认为是一个常量 属性。常量并不是可计算的属性,因此不包含 getters 和 setters。(译者注:getters 和 setters 不知道怎么翻译,待改进)如果常量名是一个元祖形式,元祖中的每一项初始化表达式中都要有对应的值let (firstNumber, secondNumber) = (10, 42)在上例中,firstNumber 是一个值为 10 的常量,secnodeName 是一个值为 42 的常量。所有常量都可以独立的使用:1 println(“The first number is (firstNumber).“) 2 / prints “The first number is 10.“ 3 println(“The second number is (secondNumber).“) 4 / prints “The second number is 42.“类型注释(:type)在常量声明中是一个可选项,它可以用来描述在类型接口(type inference)中找到的类型。声明一个静态常量要使用关键字 static。静态属性在类型属性(type propetries)中有介绍。如果还想获得更多关于常量的信息或者想在使用中获得帮助,请查看常量和变量(constants and variables), 存储属性(stored properties)等节。GRAMMAR OF A CONSTANT DECLARATIONconstant-declaration attributes opt declaration-specifiers opt letpattern-initializer-list pattern-initializer-list pattern-initializer | pattern-initializer , pattern-initializer-list pattern-initializer pattern initializer -opt initializer =expression变量声明变量声明可以在你的程序里声明一个变量,它以关键字 var 来声明。根据声明变量类型和值的不同,如存储和计算 变量和属性,存储变量和属性监视,和静态变量属性,有着不同的声明形式。(待改进) 所使用的声明形式取决于变量所声明的范围和你打算声明的变量类型。注意:你也可以在协议声明的上下文声明属性,详情参见类型属性声明。存存储储型型变变量和存量和存储储型属性型属性下面的形式声明了一个存储型变量或存储型变量属性var variable name: type = expression你可以在全局,函数内,或者在类和结构体的声明(context)中使用这种形式来声明一个变量。当变量以这种形式 在全局或者一个函数内被声明时,它代表一个存储型变量。当他在类或者结构体中被声明时,他代表一个存储型变量属性。构造器表达式可以被和常量声明相比,如果变量名是一个元祖类型,元祖的每一项的名字都要和初始化表达式一致。正如名字一样,存储型变量的值或存储型变量属性存储在内存中。计计算型算型变变量和量和计计算型属性算型属性如下形式声明一个一个存储型变量或存储型属性:var variable name: type get statements set(setter name) statements 你可以在全局,函数体内或者类,结构体,枚举,扩展声明的上下文中使用这种形式的声明。 当变量以这种形式在全局或者一个函数内被声明时,它代表一个计算型变量。当他在类,结构体,枚举,扩展声明的上下文 中中被声明时,他代表一个计算型变量属性。getter 用来读取变量值,setter 用来写入变量值。setter 子句是可选择的,只有 getter 是必需的,你可以将这些语句 都省略,只是简单的直接返回请求值,正如在只读计算属性(read-only computed properites)中描述的那样。 但是如果你提供了一个 setter 语句,你也必需提供一个 getter 语句。setter 的名字和圆括号内的语句是可选的。如果你写了一个 setter 名,它就会作为 setter 的参数被使用。如果你不写 setter 名, setter 的初始名为 newValue,正如在 seter 声明速记(shorthand setter declaration)中提到的那样。不像存储型变量和存储型属性那样,计算型属性和计算型变量的值不存储在内存中。获得更多信息,查看更多关于计算型属性的例子,请查看计算型属性(computed properties)一节。存存储储型型变变量量监视监视器和属性器和属性监视监视器器你可以用 willset 和 didset 监视器来声明一个存储型变量或属性。一个包含监视器的存储型变量或属性按如下的形式声明:var variable name: type = expression willSet(setter name) statements didSet(setter name statements 你可以在全局,函数体内或者类,结构体,枚举,扩展声明的上下文中使用这种形式的声明。 当变量以这种形式在全局或者一个函数内被声明时,监视器代表一个存储型变量监视器; 当他在类,结构体,枚举,扩展声明的上下文中被声明时,监视器代表属性监视器。你可以为适合的监视器添加任何存储型属性。你也可以通过重写子类属性的方式为适合的监视器添加任何继承的属性 (无论是存储型还是计算型的),参见重写属性监视器(overriding properyt observers)。初始化表达式在类或者结构体的声明中是可选的,但是在其他地方是必需的。无论在什么地方声明, 所有包含监视器的变量声明都必须有类型注释(type annotation)。当变量或属性的值被改变时,willset 和 didset 监视器提供了一个监视方法(适当的回应)。 监视器不会在变量或属性第一次初始化时不会被运行,他们只有在值被外部初始化语句改变时才会被运行。willset 监视器只有在变量或属性值被改变之前运行。新的值作为一个常量经过过 willset 监视器,因此不可以在 willset 语句中改变它。didset 监视器在变量或属性值被改变后立即运行。和 willset 监视器相反,为了以防止你仍然 需要获得旧的数据,旧变量值或者属性会经过didset 监视器。这意味着,如果你在变量或属性自身的 didiset 监视器语句 中设置了一个值,你设置的新值会取代刚刚在 willset 监视器中经过的那个值。在 willset 和 didset 语句中,setter 名和圆括号的语句是可选的。如果你写了一个 setter 名,它就会作为 willset 和 didset 的参数被使用。如果你不写 setter 名,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号