Programing

Swift-추가 인수 호출

lottogame 2020. 12. 5. 09:10
반응형

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" 

이것은 매우 간단하지만 나는 당황합니다.


경우에 따라 인수의 유형이 함수 선언의 유형과 일치하지 않는 경우 호출이 올바르게 표시 되더라도 "호출중인 추가 인수"가 제공됩니다. 귀하의 질문에 따르면 인스턴스 메서드를 클래스 메서드로 호출하려는 것 같습니다.이 경우 중 하나 인 것으로 나타났습니다. 예를 들어,이 코드는 똑같은 오류를 제공합니다.

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

짜잔, 더 이상 오류가 없습니다.


호출 내 경우에는 비 정적 에서 기능 정적 기능이 오류를 일으켰습니다. 함수를 정적으로 변경하면 오류가 수정되었습니다.


다음과 같이 호출해야합니다.

ViewController.setCity(city, index: 5)

Swift에는 (Objective-C로서) 명명 된 매개 변수가 있습니다.


클래스 / 구조체 메서드와 이름은 같지만 인수가 다른 전역 메서드간에 충돌이있는 경우이 오류가 발생합니다. 예를 들어 다음 코드는이 오류를 생성합니다.

여기에 이미지 설명 입력

setCity 메소드에 대해 이러한 충돌이 있는지 확인할 수 있습니다.


컴파일러에 의해 강조 표시된 표현식에 전혀 문제가없고 지정된 인수에 문제가 없을 때이 오류가 발생했습니다. 그러나 어떻게 든 원본에 연결된 완전히 다른 줄에 오류가 있습니다. 예 : 객체 (a)를 객체 (b) 및 (c)로 초기화하고, 자체적으로 (d) 및 (e)로 초기화합니다. 컴파일러는 (b)에 대한 추가 인수를 말하지만 실제로 오류는 (e) 유형과 (c)에 대한 예상 인수 사이의 유형 불일치입니다.

그래서 기본적으로 전체 표현을 확인하십시오. 필요한 경우 분해하여 부품을 임시 변수에 할당합니다.

그리고 Apple이 고칠 때까지 기다리십시오.


최신 Swift 2.2에서는 비슷한 오류가 발생하여 어리석은 실수를 해결하는 데 시간이 걸렸습니다.

class Cat {
    var color: String
    var age: Int

    init (color: String, age: Int) {
        self.color = color
        self.age = age
    }

    convenience init (color: String) {
        self.init(color: color, age: 1){ //Here is where the error was "Extra argument 'age' in call
        }
    }
}


var RedCat = Cat(color: "red")
print("RedCat is \(RedCat.color) and \(RedCat.age) year(s) old!")

수정은 다소 간단했습니다. 'self.init (color : color, age : 1)'뒤에 추가 '{}'를 제거하는 것만으로도 트릭을 수행했습니다.

 convenience init (color: String) {
        self.init(color: color, age: 1)
  }

궁극적으로 아래 출력을 제공합니다.

"RedCat is red and 1 year(s) old!"

참고 URL : https://stackoverflow.com/questions/24795035/swift-extra-argument-in-call

반응형