Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios swift中的后缀递归自定义运算符_Ios_Swift_Operator Overloading - Fatal编程技术网

Ios swift中的后缀递归自定义运算符

Ios swift中的后缀递归自定义运算符,ios,swift,operator-overloading,Ios,Swift,Operator Overloading,我试图声明一个自定义后缀运算符,它计算给定数字的阶乘,有没有办法使这个函数递归(number-1) postfix操作符!!{} 后缀func!!(号码:双人)->双人{ 如果(数字我认为这是不可能的,因为它与用于展开选项的!冲突 从 以下标记保留为标点符号,不能用作自定义运算符:(,),{,},[,],,,:,,,,,,=,,,,(作为前缀),->,`,?,和!(作为后缀操作符) 然而,在我看来,如果是这种情况,那么postfix操作符!!{}是有效的,这是一个bug。我建议 您可以通过使用-

我试图声明一个自定义后缀运算符,它计算给定数字的阶乘,有没有办法使这个函数递归(number-1)

postfix操作符!!{}
后缀func!!(号码:双人)->双人{

如果(数字我认为这是不可能的,因为它与用于展开选项的
冲突

以下标记保留为标点符号,不能用作自定义运算符:
{
}
[
]
=
(作为前缀),
->
`
(作为后缀操作符)

然而,在我看来,如果是这种情况,那么
postfix操作符!!{}
是有效的,这是一个bug。我建议


您可以通过使用
-
来解决这个问题,例如(双感叹号;U+203C)。

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

postfix operator £ {}
postfix func £(number : Double) -> Double {
  if number<=1 {
    return 1.0
  }
  return number * (number-1)£
}
postfix运算符{}
后缀func(数字:Double)->Double{

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

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

我已经向苹果公司报告过了,顺便说一句,感谢您提供了详细的答案+1:DDo您可能知道为什么会这样,但不允许使用欧元?我得到了“€”被认为是一个标识符,而不是一个操作员”。
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!