视图控制器内部函数的"Extra argument in call"


class ViewController: UIViewController {
    func raise(base: Int, exp: Int) -> Int {
        if (exp == 0) {
            return 1
        }
        else {
            return base * raise(base, exp: exp - 1)
        }
    }
    var check = raise(2, exp: 4)  // error here
    print(check)
}

我对编码和学习递归非常陌生。我只是想调用函数raise来看看它是如何工作的,但是我得到了这个错误:

调用

中的额外参数

有人能告诉我为什么我得到这个错误吗?谢谢你。

问题是var check = raise(2, exp: 4)是在您的类的根级别,您不能这样做。您必须将此调用放在函数中或类之外。这里我们从viewDidLoad内部调用:

class ViewController: UIViewController {
    func raise(base: Int, exp: Int) -> Int {
        if (exp == 0) {
            return 1
        }
        else {
            return base * raise(base, exp: exp - 1)
        }
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        var check = raise(2, exp: 4)
        print(check)
    }
}

在Swift 1中,如果在函数签名中没有标记#,你就不会指定第二个参数的名称,函数和方法之间是有区别的。在Swift 2中,这种情况不再存在了。

不能在类的实现内部调用function。如果你尝试像这样改变你的代码,它将工作得很好(作为递归)

class ViewController: UIViewController {
func raise(base: Int, exp: Int) -> Int {
    if (exp == 0) {
        let check = raise(2, exp: 4)  // no error here  
        print(check)
        return 1
    } else {
      let check = raise(2, exp: 4)  // no error here
      print(check)
      return base * raise(base, exp: exp - 1)
    }
  }
}

并且确保在返回任何内容之前编写代码,否则它将无法运行。

相关内容

最新更新