<b>本文讲的是[译] Swift + 关键字(V 3.0.1),</b>
有句话以前说过,现在我要再次提一下,一个优秀的匠人,他(她)的工具同样优秀。当我们一丝不苟地去使用这些工具时,它们就会带我们到想去的地方,或者完成我们的梦寐以求的作品。
有一些是很简单的,有一些是晦涩难懂的,也有一些是有点能认出来的。但是他们都很值得阅读和学习,这会很漫长,准备好了吗?
现在,让我们嗨起来~
associatedtype:通常作为协议的一部分,为一种类型提供一个占位符。在协议未被遵守之前,这个类型都是未知的。
class:一个构建程序代码的通用且灵活的基础结构。和 struct 有些相似,除了:
继承。允许一个类继承另一个类的特性。
类型转换。允许你在运行时检查并解释一个类的实例的类型。
析构器。允许一个类的实例释放它分配的任何资源。
引用计数。允许类的实例有多个引用。
deinit:在类的实例被释放前马上调用。
enum:为一组相关值定义通用类型,并使你能够在代码中以类型安全的方式使用这些值。在 Swift 中,它们属于第一类类型,并且可以使用一些特性,这些特性在其他语言里往往只有类才支持。
extension:允许为现有的类、结构体、枚举或协议添加新的功能。
fileprivate:访问控制结构,将作用域限制在源文件。
func : 执行一个特定的自包含的代码块。
import:将一个已构建的框架或应用,作为一个单元暴露给指定的二进制文件。
init : 构造一个类、结构体或枚举的实例的过程。
inout:传递给函数一个值,然后修改它,它会被传回原来的位置来代替原始值。适用于引用类型和值类型。
internal:访问控制结构,允许实体在它定义模块的任何源文件中使用,但不能在其外部的源文件中使用。
let:定义一个不可变的变量。
open:访问控制结构,允许对象在定义的模块之外被访问或子类化。对于成员,外部模块也是可以访问和覆盖的。
operator:一个用来检查、更改或合并值的特殊符号或短语。
private:访问控制结构,把实体的作用域限制在声明的位置。
protocol:定义适合特定任务或部分功能的类、属性和其他需求的蓝图。
public:访问控制结构,允许对象在被定义的模块内部访问或子类化,对于成员,也只可以在定义的模块内部可以访问和覆盖。
static:定义该类型自己的调用方法。也用于定义其静态成员。
struct:一个构建程序代码的通用且灵活的基础结构,也提供了成员的初始化方法。和<code>class</code> 不同,他们在代码中被传递的时候,永远复制,而不会启动自动引用计数。另外,他们也不能:
使用继承。
在运行时进行类型转换。
拥有或者使用析构器。
subscript:访问集合、列表或者序列的快捷方式。
typealias:将现有的类型的命名作为别名。
var:定义一个可变的变量。
break:在结束一个循环,或者在 <code>if</code>、<code>switch</code> 中使用。
case:求值,然后和 <code>switch</code> 提供的类型来比较的语句。
continue:结束循环语句的当前迭代,但是不终止循环语句的继续执行。
default:用来覆盖在 <code>case</code> 结构中未被明确定义的值。
defer:用来执行在程序控制转移到作用域之外之前的代码。
do:一个前置语句,用来处理一块代码运行的错误。
else:与 <code>if</code> 语句联合使用,当条件为真时执行代码的一部分,当相同的条件为假的时候执行另一部分。
fallthrough:在 <code>switch</code> 语句中,明确允许一个 case 执行完继续执行下一个。
for:对序列进行迭代,例如数字的范围、数组中的项或字符串里的字符。和 <code>in</code> 关键字配对
guard:在不满足一个或多个条件的情况下,将程序控制转移到作用域之外,同时还可以拆包任何可选类型。
if:根据一个或者多个条件的值来执行代码。
in:对序列进行迭代,例如数字的范围、数组中的项或字符串里的字符。和 <code>for</code> 关键字配对
repeat:在考虑循环条件之前,执行一次循环里的内容。
return:立即打断当前上下文的控制流,另外返回一个得到的值(如果存在的话)。
and
switch:考虑一个值,并与几种可能的匹配模式进行比较。然后根据成功匹配的第一个模式,执行合适的代码块。
where:要求关联的类型必须符合一个特定的协议,或者和某些特定的参数类型相同。它也用于提供一个额外的控制条件,来判断一个模式是否符合控制表达式。where 子句可以在多个上下文中使用,这些例子是 where 作为从句和模式匹配的主要用途。
以及
while:执行一组语句,直到条件变为 `false'。
Any:可以用来表示任何类型的实例,包括函数类型。
as:类型转换运算符,用于尝试将值转换成不同的、预期的和特定的类型。
或
false:Swift 中用于表示逻辑类型 — 布尔类型的两个值之一,代表非真。
is:类型检查运算符,用来识别一个实例是否是特定的类型。
nil:表示 Swift 中任何类型的无状态的值。和 Objective-C 的 nil 不同,它是一个指向不存在对象的指针。
rethrows:表明仅当该函数的一个函数类型的参数抛出错误时,该函数才抛出错误。
super:公开的访问父类属性、方法或别名。
self:每个类型实例的隐含属性,它完全等于实例本身。在区别函数参数名和属性名时非常有用。
Self:在协议里,代表最终符合给定协议的类型。
throw:从当前上下文直接抛出一个错误。
throws:表示一个函数、方法或初始化方法可能会抛出一个错误。
true:Swift 中用于表示逻辑类型 — 布尔类型的两个值之一,代表真。
try:表示接下来的函数可能会抛出一个错误。有三种不同的用法:try、try? 和 try!。
_:通配符,匹配并忽略任何值。
another use
#available:<code>if</code>、<code>while</code> 和 <code>guard</code> 语句的条件,根据特定的平台,来在运行时查询 API 的可用性。
#colorLiteral:playground 字面量,返回一个可交互的颜色选择器来赋值给一个变量。
#column:特殊的文字表达式,返回它开始位置的列数。
#else:编译条件控制语句,允许程序条件编译一些指定的代码。与 <code>#if</code> 语句结合使用,当条件为真时执行代码的一部分,当相同的条件为假时执行另一部分。
#elseif:条件编译控制语句,允许程序条件编译一些指定的代码。与 <code>#if</code> 语句结合使用,在给出的条件为真时,执行这部分的代码。
#endif:条件编译控制语句,允许程序条件编译一些指定的代码。用于标记结束需要条件编译的代码。
#file:特殊的文字表达式,返回这个文件的名称。
#fileReference:playground 字面量,返回一个选择器来选择文件,然后作为一个 <code>NSURL</code> 实例返回。
#function:特殊的文字表达式,用来返回一个函数的名称,如果在方法里,它返回方法名,如果在属性的 getter 或者 setter 里,它返回属性的名称,如果在特殊的成员,比如 <code>init</code> 或者 <code>subscript</code>里,它返回关键字,如果在文件的顶部,那它返回当前模块的名称。
#if:条件编译控制语句,允许程序条件编译一些指定的代码。根据一个或多个条件来判断是否执行代码。
#imageLiteral:playground 字面量,返回一个选择器来选择图片,然后作为一个 <code>UIImage</code> 实例返回。
#line:特殊的文字表达式,返回它所在位置的行数。
#selector:构成 Objective-C 选择器的表达式,它使用静态检查来确保该方法存在,并且它也暴露给 Objective-C。
#sourceLocation:用于指定行数和文件名的行控制语句,该行数和文件名可能和正在编译的源代码的行数和文件名不同。适用于诊断和调试时,更改源代码的位置。
如果这些关键字在它们各自的上下文之外使用,则它们实际上可以作为标识符
associativity:指定如何在没有使用 <code>left</code>、<code>right</code> 或 <code>none</code> 分组括号的情况下,将具有相同优先级级别的运算符组合在一起。
convenience:类中的辅助初始化器,最终会把实例的初始化委托给特定的初始化器。
dynamic:表示对该成员或函数的访问从未被编译器内联或虚拟化,这意味着对该成员的访问始终使用 Objective-C 运行时来动态(而非静态)派发。
didSet:属性观察,在属性存入一个值后立即调用。
final:阻止方法、属性或者下标被继承。
get:返回成员给定的值。也用于计算属性,可以间接地获取其他属性和值。
infix:用于两个目标之间的特定运算符。如果一个新的全局运算符被定义为中置运算符,那它还需要成员之间的优先级组。
indirect:表示枚举将另一个枚举的实例作为一个或多个枚举的关联值。
lazy:属性的初始值在第一次使用时再计算。
left:指定操作符的关联顺序为从左到右,这样在没有分组括号的情况下,相同优先级的也会被正确的分到一组。
mutating:允许在特定的方法中,对结构体或枚举的属性进行修改。
none:运算符没有提供任何关联性,这限制了相同优先级运算符的出现间隔。
nonmutating:指定成员的 setter 不会修改它包含的实例,但是可以有其他的目的。
optional:用于描述协议中的可选方法。这些方法不必由符合协议的类型来实现。
override:表示子类将提供自己的实例方法、类方法、实例属性,类属性或下标的自定义实现,否则它将从父类继承。
postfix:指定操作符在它操作的目标之后。
precedence:表示一个操作符的优先级高于其他,所以这些运行符先被应用。
prefix:指定操作符在它的操作的目标之前。
required:强制编译器确保每个子类都必须实现给定的初始化器。
right:指定操作符的关联顺序为从右到左,这样在没有分组括号的情况下,相同优先级的也会被正确的分到一组。
set:获取成员的值来作为它的新值。也可用于计算属性,间接地设置其他属性和值。如果一个计算属性的 setter 没有定义一个名字来代表要设置的新值,那么默认新值的名字为<code>newValue</code>。
Type:代指任何类型的类型,包括类的类型、结构体的类型、枚举类型和协议类型。
unowned:在循环引用中,一个实例引用另一个实例,在另一个实例具有相同的生命周期或更长的生命周期时,不会对它强持有。
weak:在循环引用中,一个实例引用另一个实例,在另一个实例具有较短生命周期时,不会对它强持有。
willSet:属性观察,在属性即将存入一个值之前调用。
呼!
这是一个有趣的创作。我选了一些我以前没有真正仔细思考的东西写,但是我认为这些技巧是不需要像要考试的列表一样记住的。
更好的是,随时带着这个列表。让它随时的刺激着你的脑波,这样在你需要使用一些特定的关键字的时候,你就会知道它,然后使用它。
<b></b>
<b>原文发布时间为:2017年3月08日</b>
<b>本文来自云栖社区合作伙伴掘金,了解相关信息可以关注掘金网站。</b>