不能超载“。”操作员在swift

时间:2014-06-18 22:09:37

标签: swift

即使快速文档说我们可以超载。符号在没有编译器抱怨的情况下我似乎无法这样做。

以下是我正在做的事情:

operator infix . {}

@infix func . (left:Vector2D, right:Vector2D) -> Vector2D {
  //func
}

有没有人在swift中成功完成此操作?

2 个答案:

答案 0 :(得分:4)

您可以使用.字符in a custom operator,但不能创建仅.字符的运算符 - 看起来该标记是语法的更基本部分。 (实际上,.的限制似乎比你在language guide的语法部分看到的更多,因为你可以创建扩展静默运算符......,但不是快乐operator ^.^。)

(想一想:如果你试图用.来定义两个向量的点积,你就很难用它来处理那些向量的成员。)

答案 1 :(得分:1)

我想你可能会误解documentation

  

无法重载默认赋值运算符(=)。只能重载复合赋值运算符。同样,三元条件运算符(a?b:c)也不能重载。

.显然不是compound assignment operator,它是会员选择运营商。

但是,你可以

  除了 Swift提供的标准运算符之外,

声明并实现自己的自定义运算符。自定义运算符只能使用字符/ = - + *%<来定义。 > ! &安培; | ^。 〜