Swift运算符
运算符
Swift 标准库定义了许多可供使用的运算符,其中大部分在 基础运算符 和 高级运算符 中进行了阐述。这里将描述哪些字符能用作运算符。
运算符由一个或多个以下字符组成:/
、=
、-
、+
、!
、*
、%
、<
、>
、&
、|
、^
、~
、.
。也就是说,标记 =
,->
、//
、/*
、*/
、.
以及一元前缀运算符 &
属于保留字,这些标记不能被重写或用于自定义运算符。
运算符两侧的空白被用来区分该运算符是否为前缀运算符(prefix operator)、后缀运算符(postfix operator)或二元运算符(binary operator)。规则总结如下:
-
如果运算符两侧都有空白或两侧都无空白,将被看作二元运算符。例如:
a+b
和a + b
中的运算符+
被看作二元运算符。 -
如果运算符只有左侧空白,将被看作前缀一元运算符。例如
a ++b
中的++
被看作前缀一元运算符。 -
如果运算符只有右侧空白,将被看作后缀一元运算符。例如
a++ b
中的++
被看作后缀一元运算符。 -
如果运算符左侧没有空白并紧跟
.
,将被看作后缀一元运算符。例如a++.b
中的++
被看作后缀一元运算符(同理,a++ . b
中的++
是后缀一元运算符而a ++ .b
中的++
不是).
鉴于这些规则,运算符前的字符 (
、[
和 {
;运算符后的字符 )
、]
和 }
以及字符 ,
、;
和:
都将用于空白检测。
以上规则需注意一点,如果运算符 !
或 ?
左侧没有空白,则不管右侧是否有空白都将被看作后缀运算符。如果将 ?
用作可选类型(optional type)修饰,左侧必须无空白。如果用于条件运算符 ? :
,必须两侧都有空白。
在特定构成中 ,以 <
或 >
开头的运算符会被分离成两个或多个标记,剩余部分以同样的方式会被再次分离。因此,在 Dictionary<String, Array<Int>>
中没有必要添加空白来消除闭合字符 >
的歧义。在这个例子中, 闭合字符 >
被看作单字符标记,而不会被误解为移位运算符 >>
。
要学习如何自定义新的运算符,请参考 自定义操作符 和 运算符声明。学习如何重写现有运算符,请参考 运算符方法。
运算符语法语法
运算符 → 运算符字符 运算符 可选
运算符字符 → / | = | - | + | ! | * | % | < | > | & | | | ^ | ~ | .
二元运算符 → 运算符
前置运算符 → 运算符
后置运算符 → 运算符