我正在尝试声明一个自定义后缀运算符来计算给定数字的阶乘,有没有办法使这个函数递归(数字1)!!
postfix operator !! {}
postfix func !! (number: Double) -> Double {
if (number <= 1) { return 1.0 }
return number * (number-1)!!
}
答案 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