在Swift元组上定义前缀运算符

时间:2016-01-29 00:03:43

标签: swift tuples prefix-operator

这可能是swiftc错误,但在元组上定义前缀运算符似乎不起作用:

typealias Pt = (x: Int, y: Int)
prefix func - (p: Pt) -> Pt { return (-p.x, -p.y) }
-Pt(5,6)

结果:

error: unary operator '-' cannot be applied to an operand of type '(Int, Int)'
-(5,6)
 ^

这是我的虫子还是斯威夫特?或者有解决方法吗?

请注意,将Pt定义为结构可以正常工作:

struct Pt { var x: Int, y: Int }
prefix func - (p: Pt) -> Pt { return Pt(x: -p.x, y: -p.y) }
-Pt(x: 5, y: 6)  // is equal to Pt(x: -5, y: -6)

并且元组上的中缀运算符也能正常工作。

2 个答案:

答案 0 :(得分:2)

别介意人们;我认为这只是一个错误。

正如我在上面的评论中所指出的那样this bug filed for it(如果您遇到此问题,可以投票选举)。

答案 1 :(得分:0)

我认为问题是根据documentation

  

类和结构可以提供自己的实现   现有的运营商。

元组既不是类也不是结构(除了具有0或1值的元组,这相当于Void和类型)。例如,如果从元组中删除'y'组件,只需保留'x',那么代码就会编译。