는이 같은 기본 매개 변수 다음에 기본이 아닌 매개 변수가 함수가 있다고 가정 해 비 기본 매개 변수 전에 기본 매개 변수 기능 :스위프트 :
내가 그것을 호출하고 기본값을 사용하는 방법을func f(first:Int = 100, second:Int){}
첫 번째 매개 변수?
는이 같은 기본 매개 변수 다음에 기본이 아닌 매개 변수가 함수가 있다고 가정 해 비 기본 매개 변수 전에 기본 매개 변수 기능 :스위프트 :
내가 그것을 호출하고 기본값을 사용하는 방법을func f(first:Int = 100, second:Int){}
첫 번째 매개 변수?
현재의 컴파일러는 매개 변수 목록의 중간에 기본 매개 변수를 허용하지 않습니다.
당신이 first
매개 변수의 기본값을 사용하려는 경우이 같은 함수를 호출 할 수 있습니다 :
f(1)
당신이 first
매개 변수 사용에 대한 새 값을 제공하려는 경우 외부 이름 :
f(first: 3, 1)
문서 explains 재치 매개 변수 h 기본값은 자동으로 외부 이름으로 지정됩니다.
Swift는 사용자가 직접 외부 이름을 제공하지 않으면 정의한 기본 매개 변수에 대한 자동 외부 이름을 제공합니다. 자동 외부 이름은 코드에서 로컬 이름 앞에 해시 기호를 작성한 것처럼 로컬 이름과 동일합니다.이 클래스의 메소드 인 경우
매개 변수 목록 끝에 기본 매개 변수가 있어야합니다. 함수의 매개 변수 목록의 마지막에 기본값으로
func f(second:Int, first:Int = 100){}
f(10)
장소 매개 변수를 설정합니다. 이렇게하면 함수에 대한 모든 호출에서 기본값이 아닌 인수에 대해 동일한 순서가 사용되며 각각의 경우에 동일한 함수 인 이 호출됨을 분명히합니다.
? 컴파일 시간 오류가 아닌 이유는 무엇입니까? – CarmeloS
아니요, 의미가 없으므로 "함수에 대한 모든 호출이 기본이 아닌 인수에 대해 동일한 순서를 사용하도록 보장하지"않습니다. 그것은 효과가 있지만 혼란 스러울 수 있습니다. 그래서 Apple은 개발자에게 기본값을 가진 매개 변수를 어디에 두어야하는지에 대한 가이드 라인을 정의했습니다. –
, 당신은 함수 f 글로벌 인 경우에는 다음과 같이 호출하기 위해 필요한이
class Test
{
func f(first:Int = 100, second:Int)
{
println("first is \(first)")
println("second is \(second)")
}
func other()
{
f(second: 4)
f(first: 30, second: 5)
//f(4) will not compile, and neither will f(9,12)
}
}
과 같이 호출해야합니다
f(4)
f(first: 30, 5)
이 인쇄 : 스위프트 3에
first is 100
second is 4
first is 30
second is 5
:
이 오류를 올릴 것이다defaultParameterBefore(2)
를 호출
func defaultParameterBefore(_ x: Int = 1, y: Int) {}
error: missing argument for parameter 'y' in call
유일한 예외는 다음과 같습니다
func defaultParameterBetween(_ x: Int, _ y: Bool = true, _ z: String) {
if y {
print(x)
} else
z()
}
}
// error: missing argument for parameter #3 in call
// defaultParameterWithTrailingClosure(1, { print(0) }
// Trailing closure does work, though.
func defaultParameterWithTrailingClosure(_ x: Int, y: Bool = true,
_ z:() -> Void) {
if y {
print(x)
} else {
z()
}
}
defaultParameterWithTrailingClosure(1) { print(0) }
빠른 버전 :
를 통해 호출 DEVELOPMENT-SNAPSHOT-2016-04-12
그렇게하지 않고 그 전에 기본 값으로 매개 변수를 사용하여 의미가
이 답변은 기술적으로 정확하며 스위프트에서는 이렇게 할 수 있지만 매우 혼란스럽고 피해야합니다. 마지막에 기본 매개 변수를 갖도록 함수를 리펙토링하는 것은 그렇게 많은 작업이 아닙니다. 이 단순한 경우조차도'f (1) '에 대한 호출이 무엇을 의미하는지 완전히 명확하지 않다. [@ Connor의 대답] (http://stackoverflow.com/a/24102938/133166)이 받아 들여지는 것이 좋습니다. –
@Rafael 나는 이것이 최선의 방법이라고 말하지 않았다. 나는 그 질문에 정확하게 대답했다. 그러므로 이것은 받아 들여진 대답이어야합니다. – nathan
@Rafael Swift 3'f (1)'은 오류를 일으킬 것입니다. – weakish