2015-10-05 51 views
0
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,看看它是如何工作的,但我得到这个错误:ViewController中的函数“调用中的额外参数”

extra argument in call

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

+1

我使用的是Swift 2.0,当我使用你的代码时它不会给我任何错误。 – Nishant

+0

在旧版本的Swift中,调用将是'var check = raise(2,4)'。 –

+0

@Nishant因为你使用操场而没事吗?尝试在项目中。 –

回答

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

} 

而且在斯威夫特1,你不会如果它不与函数签名#标记,以指定第二个参数的名称,有一个功能和方法之间的区别。这与Swift 2不一样。

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

,并确保你编写代码之前,你任何回报,否则将无法运行。