"呼叫中的额外参数"对于ViewController中的函数

时间:2015-10-05 17:44:43

标签: swift

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来看看它是如何工作的,但是我得到了这个错误:

  

呼叫中的额外参数

有人能告诉我为什么会收到此错误吗?谢谢。

2 个答案:

答案 0 :(得分:0)

问题是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不再是这种情况了。

答案 1 :(得分:0)

你不能在类的实现中调用函数。如果你试图像这样改变你的代码它会很好地工作(作为递归)

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)
    }
  }
}

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