我试图从DetailViewController类调用在ViewController类中声明的函数。
尝试调试“通话中的额外参数”时,会弹出错误消息。
在ViewController类中:
func setCity(item : Cities, index : Int) { citiesArray!.removeObjectAtIndex(index) citiesArray!.insertObject(item, atIndex: index) }
在详细信息ViewController类
// 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 func setCity(...)
ViewController.setCity
setCity
class Bar : Foo { init() { super.init() let foo = Foo() foo.name(1, b: 2) } }
瞧,再也没有错误。