2016-10-01 3 views
3

내가 코드에서, 예를 들어 3는 스위프트 3 폐쇄는 오버로드 확인

스위프트의 폐쇄와 함수 오버로드 확인에 의해 혼동 해요 : 내가 Narrow하지 Wide 기대

func f<T>(_ a: T) { 
    print("Wide") 
} 

func f(_ a: (Int)->(Int)) { 
    print("Narrow") 
} 

f({(a: Int) -> Int in return a + 1}) 

, 인쇄 할 콘솔에. 아무도 왜 특정 오버로드가 클로저가 아닌 인수에 대해 선택되지만 클로저에 대해서는 선택되지 않거나 컴파일러 버그 인 이유를 설명 할 수 있습니까?

예상되는 행동을 Swift 2가 나타 냈습니다.

+0

어떤 행동이 "예상"되는지는 분명하지 않지만 Swift 2와 Swift 3가 다른 답변을 제시한다는 것은 확실합니다. 이것이 중요한면에서 당신에게 영향을 미친다면 확실하게 https://bugs.swift.org로 버그를 제출하십시오; 적어도 하루 안에 좋은 대답을 얻을 수 있습니다. – matt

+0

예, "나는 개인적으로 이것이 변하기를 기대하지 않았습니다. –

답변

1

이것은 아마도 클로저 매개 변수의 기본 "이스케이프 처리"동작이 변경 되었기 때문일 수 있습니다.

당신에 특정 기능을 변경하는 경우 예상대로

(당신은 아마 더 분명했다 다른 여러 곳에서했습니다이이 같은 변화를)

func f(_ a:@escaping (Int)->Int) 
{ 
    print("Narrow") 
} 
는 "좁은"인쇄합니다