我试图从DetailViewController类调用ViewController类中声明的函数。
在ViewController类中:
func setCity(item : Cities,index : Int) { citiesArray!.removeObjectAtIndex(index) citiesArray!.insertObject(item,atIndex: index) }
在detailViewController类中
// city of type Cities ViewController.setCity(city,5 ) //Error: "Extra argument in call"
这很简单,但我很困惑。
在某些情况下,即使调用看起来正确,如果参数的类型与函数声明的类型不匹配,也会给出“调用中的额外参数”。从你的问题,它看起来像你试图调用一个实例方法作为类方法,我发现是这些情况之一。例如,此代码给出完全相同的错误:
class Foo { func name(a:Int,b: Int) -> String { return "" } } class Bar : Foo { init() { super.init() Foo.name(1,b: 2) } }
你可以在你的代码中通过将setCity的声明更改为class func setCity(…)(在注释中提到)来解决这个问题。这将允许ViewController.setCity调用按预期工作,但我猜想你想setCity是一个实例方法,因为它似乎修改实例状态。您可能想要获取一个实例到您的ViewController类,并使用它来调用setCity方法。说明使用上面的代码示例,我们可以这样改变Bar:
class Bar : Foo { init() { super.init() let foo = Foo() foo.name(1,b: 2) } }
Voila,没有更多的错误。