一尘不染

Swift-通话中的额外参数

swift

我试图从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"

这很简单,但我感到困惑。


阅读 251

收藏
2020-07-07

共1个答案

一尘不染

在某些情况下,即使参数调用的类型与函数声明的类型不匹配,即使调用看起来正确,也会给出“调用中的附加参数”。从您的问题来看,您似乎正在尝试将实例方法称为类方法,我发现这是其中一种情况。例如,此代码给出了完全相同的错误:

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

瞧,再也没有错误。

2020-07-07