firstThing
기본값으로 설정 하면 기본값 nil
이 nil
없으면 함수를 호출 할 때 매개 변수가 없다는 오류가 발생합니다.
입력 Int?
하면 기본값 인으로 선택 사항이라고 생각 nil
했습니다. 맞습니까? 그렇다면 왜 = nil
? 없이는 작동하지 않습니다 .
func test(firstThing: Int? = nil) {
if firstThing != nil {
print(firstThing!)
}
print("done")
}
test()
답변
옵션과 기본 매개 변수는 서로 다른 두 가지입니다.
옵션이 될 수있는 변수 nil
를입니다.
기본 매개 변수는 해당 매개 변수를 생략 할 때 기본값을 사용합니다 .이 기본값은 다음과 같이 지정됩니다.func test(param: Int = 0)
선택적 매개 변수를 지정하는 경우 전달하려는 값이 인 경우에도이를 제공해야합니다 nil
. 함수가 이와 같이 보이면 다음과 같이 func test(param: Int?)
호출 할 수 없습니다 test()
. 매개 변수는 선택 사항이지만 기본값이 없습니다.
또한 두 가지를 결합하고 다음과 nil
같이 기본값 인 위치를 선택적으로 취하는 매개 변수를 가질 수 있습니다 func test(param: Int? = nil)
..
답변
기본 인수를 사용하면 인수를 전달하지 않고 함수를 호출 할 수 있습니다. 인수를 전달하지 않으면 기본 인수가 제공됩니다. 따라서 코드를 사용하면이 …
test()
… 다음과 정확히 동일합니다.
test(nil)
이와 같이 기본 인수를 생략하면 …
func test(firstThing: Int?) {
if firstThing != nil {
print(firstThing!)
}
print("done")
}
… 그러면 더 이상 할 수 없습니다 …
test()
그렇게하면 설명했던 “인수 누락”오류가 발생합니다. 인수가 nil
다음 과 같더라도 매번 인수를 전달해야합니다 .
test(nil) // this works
답변
Swift는 매개 변수를 전달하지 않고 함수를 호출 할 수 있으며 여전히 호출되는 JavaScript와 같은 언어와 다릅니다. 따라서 Swift에서 함수를 호출 하려면 매개 변수에 값을 할당 해야 합니다.
매개 변수의 기본값을 사용하면 함수를 호출 할 때 값을 지정하지 않고도 값을 지정할 수 있습니다. 그렇기 때문에 test()
테스트 선언에 기본값을 지정할 때 작동합니다.
해당 기본값을 포함하지 않으면 호출시 값을 제공해야합니다 test(nil)
..
또한,이 질문과 직접적으로 관련이 없지만, 아마 주목할 가치가있을 것입니다. 당신은 Swift에서 가능한 nil 옵션을 다루기 위해 null 포인터를 다루는 “C ++”방식을 사용하고 있습니다. 다음 코드는 더 안전하며 (특히 멀티 스레딩 소프트웨어에서) 선택 사항의 강제 언 래핑을 방지 할 수 있습니다.
func test(firstThing: Int? = nil) {
if let firstThing = firstThing {
print(firstThing)
}
print("done")
}
test()
답변
당신은 Optional
기본값을 갖는 것과 합동 하고 있습니다. An Optional
은 값 또는 nil을 허용합니다. 기본값이 있으면 함수를 호출 할 때 인수를 생략 할 수 있습니다. 인수는 Optional
유형 유무에 관계없이 기본값을 가질 수 있습니다 .
func someFunc(param1: String?,
param2: String = "default value",
param3: String? = "also has default value") {
print("param1 = \(param1)")
print("param2 = \(param2)")
print("param3 = \(param3)")
}
출력이있는 호출 예 :
someFunc(param1: nil, param2: "specific value", param3: "also specific value")
param1 = nil
param2 = specific value
param3 = Optional("also specific value")
someFunc(param1: "has a value")
param1 = Optional("has a value")
param2 = default value
param3 = Optional("also has default value")
someFunc(param1: nil, param3: nil)
param1 = nil
param2 = default value
param3 = nil
요약:
- ? (예 : String?)은
Optional
nil이거나 Type의 인스턴스를 포함 할 수 있습니다. - 기본값이있는 인수는 함수 호출에서 생략 될 수 있으며 기본값이 사용됩니다.
Optional
및 둘 다 기본값이있는 경우 함수 호출에서 생략하거나 포함 할 수 있으며 nil 값으로 제공 할 수 있습니다 (예 : param1 : nil).
답변
“선택적 매개 변수”는 “이 매개 변수의 유형은 선택 사항입니다”를 의미합니다. “이 매개 변수는 선택 사항이므로 함수를 호출 할 때 무시할 수 있습니다”를 의미하지는 않습니다.
“선택적 매개 변수”라는 용어가 혼란스러워 보입니다. 명확히하기 위해 “선택적 매개 변수”대신 “선택적 유형 매개 변수”라고 말하는 것이 더 정확합니다. 여기서 “선택적”이라는 단어는 매개 변수 값의 유형을 설명하기위한 것일뿐 다른 것은 설명하지 않습니다.
답변
bool 매개 변수를 사용해야하는 경우 기본값을 지정하기 만하면됩니다.
func test(WithFlag flag: Bool = false){.....}
그런 다음 매개 변수없이 또는 매개 변수와 함께 사용할 수 있습니다.
test() //here flag automatically has the default value: false
test(WithFlag: true) //here flag has the value: true
답변
func
매개 변수를 사용하거나 사용하지 않고 를 호출 할 수 있도록 func
하려면 다른 이름을 호출하는 동일한 이름 의 두 번째 를 만들 수 있습니다 .
func test(firstThing: Int?) {
if firstThing != nil {
print(firstThing!)
}
print("done")
}
func test() {
test(firstThing: nil)
}
이제 test
매개 변수없이 또는 매개 변수없이 이름이 지정된 함수를 호출 할 수 있습니다 .
// both work
test()
test(firstThing: 5)