The following keywords are reserved and can’t be used as identifiers, unless they’re escaped with backticks, as described above in Identifiers. Keywords other than inout, var, and let can be used as external parameter names in a function declaration or function call without being escaped with backpacks.
Keywords used in declarations:
associatedtype, class,
deinit :对象销毁的调用,多用于资源释放,数据库的关闭等等
enum, extension,
func, import, init,
inout:输入输出参数(In-Out Parameters)
变量参数,仅仅能在函数体内被更改。如果你想要一个函数可以修改参数的值,并且想要在这些修改在函数调用结束后仍然存在,那么就应该把这个参数定义为输入输出参数(In-Out Parameters)。
定义方法是在参数定义前加 inout 关键字。一个输入输出参数有传入函数的值,这个值被函数修改,然后被传出函数,替换原来的值。
你只能传入一个变量作为输入输出参数。你不能传入常量或者字面量(literal value),因为这些量是不能被修改的。当传入的参数作为输入输出参数时,需要在参数前加&符,表示这个值可以被函数修改。
注意: 输入输出参数不能有默认值,而且可变参数不能用 inout 标记。如果你用 inout 标记一个参数,这个参数不能被 var 或者 let 标记。
下面是例子,swapTwoInts 函数,有两个分别叫做 a 和 b 的输入输出参数:
func swapTwoInts(inout a: Int, inout b: Int) {
let temporaryA = a
a = b
b = temporaryA
}
这个 swapTwoInts 函数仅仅交换 a 与 b 的值。该函数先将 a 的值存到一个暂时常量 temporaryA 中,然后将 b 的值赋给 a,最后将 temporaryA 幅值给 b。
你可以用两个 Int 型的变量来调用 swapTwoInts。需要注意的是,someInt 和 anotherInt 在传入 swapTwoInts 函数前,都加了 & 的前缀:
var someInt = 3
var anotherInt = 107
swapTwoInts(&someInt, &anotherInt)
println("someInt is now \(someInt), and anotherInt is now \(anotherInt)")
// prints "someInt is now 107, and anotherInt is now 3”
从上面这个例子中,我们可以看到 someInt 和 anotherInt 的原始值在 swapTwoInts 函数中被修改,尽管它们的定义在函数体外。
注意: 输出输出参数和返回值是不一样的。上面的 swapTwoInts 函数并没有定义任何返回值,但仍然修改了 someInt 和 anotherInt 的值。输入输出参数是函数对函数体外产生影响的另一种方式。
, internal,
let, operator:自定义运算符, private, protocol, public,
static, struct, subscript, typealias, and var.
Keywords used in statements:
break, case, continue, default, defer, do, else,
fallthrough, for, guard, if, in, repeat, return,
switch, where, and while.
Keywords used in expressions and types:
as, catch, dynamicType, false, is, nil,
rethrows, super, self, Self, throw,
throws, true, try, #column, #file, #function, and #line.
Keywords used in patterns:
_.
Keywords that begin with a number sign (#):
#available, #column, #else#elseif,
#endif, #file, #function, #if, #line, and #selector.
Keywords reserved in particular contexts:
associativity, convenience, dynamic,
didSet, final, get, infix, indirect, lazy,
left, mutating, none, nonmutating,
optional, override, postfix, precedence,
prefix, Protocol, required, right, set,
Type, unowned, weak, and willSet.
Outside the context in which they appear in the grammar, they can be used as identifiers.
The following tokens are reserved as punctuation and can’t be used as custom operators:
(, ), {, }, [, ], ., ,, :, ;, =, @, #,
& (as a prefix operator), ->, `, ?, and ! (as a postfix operator).