swift中的postfix递归自定义运算符

时间:2015-08-29 18:37:46

标签: ios swift operator-overloading

我正在尝试声明一个自定义后缀运算符来计算给定数字的阶乘,有没有办法使这个函数递归(数字1)!!

postfix operator !! {}
postfix func !! (number: Double) -> Double {

    if (number <= 1) { return 1.0 }
    return number * (number-1)!!

}

3 个答案:

答案 0 :(得分:2)

我认为这是不可能的,因为它与用于展开选项的!冲突。

来自The Swift Programming Language: Keywords and Puncutation

  

以下令牌保留为标点符号,不能用作自定义运算符:(){}[].,:;=@#,{{ 1}}(作为前缀运算符),&->` ?(作为后缀运算符)

但是,在我看来,如果是这种情况,那么!是有效的错误。我推荐filing a bug

您可以使用postfix operator !! {}例如(双重感叹号; U + 203C)解决此问题。

答案 1 :(得分:0)

这是可行的,但是如果你使用!!则不行 - 它将它解释为两个隐式的可选参数。其他一些符号也可以起作用 - 例如:

postfix operator £ {}
postfix func £(number : Double) -> Double {
  if number<=1 {
    return 1.0
  }
  return number * (number-1)£
}

答案 2 :(得分:0)

我们需要在文件级别指定后缀运算符:

import UIKit

postfix operator !
struct A {
    var a = 5
    var b = 10

}

extension A {

    static postfix func !(m: A) -> A {
        return A(a: -m.a, b: -m.b)
    }

}

var obj1 = A(a:45, b: 46)
var obj4 = obj1!

现在,obj4值将为-45,-46