1

는 다음과 같은 방법 서명을 고려고유 한 형식의 기본 매개 변수가 여러 개있는 신속한 함수의 경우 형식 유추가 구제되지 않는 이유는 무엇입니까? 오류가 다음과 같은 방법으로 결과에이 메소드를 호출</p> <pre><code>func doSomething(_ boolToConsider: Bool = false, _ stringToConsider: String? = nil) </code></pre> <p>:

doSomething("foo") 

error message

왜 그것을하려한다는 것을 스위프트 인식하지 못합니다 기본 boolToConsider과 제공된 stringToConsider을 사용 하시겠습니까?

+1

함수 매개 변수의 외부 이름을 사용해 보았습니까? 또한 두 개의 함수를 사용할 수 있습니다. 하나는 부울을 받고 두 번째 String은 두 번째 문자열을 입력 한 다음 세 번째 함수를 만들어 두 가지 모두에 공통적 인 작업을 수행합니다. – Woof

답변

1

스위프트의 저자가 왜 그것을 지원하지 않거나 지원을 계획하고 있는지 알 수 없습니다. 인수 목록의 어떤 부분이 전달되었는지 유형 기반 추론을하는 것은 상당히 혼란스러운 코드로 이어질 것이라고 추측 할 수 있습니다.

방금 ​​기능을 오버로드 할 수 있습니다. 외부 매개 변수 레이블 모든 익명 (_) 때문에

func doSomething(_ stringToConsider: String) { 
    doSomething(false, stringToConsider) 
} 
0

유형의 추론은, 예를 들어 작동하지 않습니다. doSomething에 하나 이상의 매개 변수 레이블을 지정하면이 문제가 해결됩니다. enter image description here

2

이미 당신이 그렇지 않으면 당신의 방법의 모호한 사용에 대해 불평 할 것이다 기본값으로 설정된 모든 매개 변수를 가질 수 있습니다, 당신은 3 명 가지 방법 서명하고 그 중 하나를 제공 원하는 것을 달성 할 수 @Woof 언급 :

func doSomething(_ bool: Bool) { 
    print("bool:", bool) 
} 
func doSomething(_ string: String) { 
    print("string:", string) 
} 
func doSomething(_ bool: Bool = false, _ string: String = "") { 
    print("bool:", bool) 
    print("string:", string) 
} 

doSomething(true) 
doSomething("foo") 
doSomething() 
doSomething(true, "foo") 

이 인쇄됩니다

doSomething with bool value only

bool: true

doSomething with string value only

string: foo

doSomething with default values

bool: false

string: default

doSomething with default values

bool: true

string: foo

관련 문제