1. ホーム
  2. swift

[解決済み] Swift - 呼出しの余分な引数

2022-02-28 16:28:45

質問

ViewControllerクラスで宣言された関数をDetailViewControllerクラスから呼び出そうとしています。

デバッグしようとすると、「Extra Argument in call"」というエラーがポップアップ表示されます。

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" 

これはとても簡単なことなのに、私は困惑しています。

どのように解決するのですか?

呼び出しが正しくても、引数の型が関数宣言と一致しない場合、 "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)
    }
}

ほら、エラーが出なくなった。