2014-06-05 3 views
20

Swift의 Array 유형은 sort이라는 멤버 함수가 있으며 서명은 sort(isOrderedBefore: (T, T) -> Bool)입니다. 이 함수는 글로벌 버전 sort과 다르며 서명이 sort(array: T[], pred: (T, T) -> Bool)입니다.멤버 함수와 동일한 이름을 가진 전역 함수 호출

하나가 Array (Why does the same method fail when inside an Array extension in Swift?를 참조) Array 확장의 범위 내부에서 sort를 호출하면 자연스럽게 로컬 버전을 초래할 수있는 사용중인 확장하는 경우.

내부 범위의 함수 이름과 일치하는 경우에도 명시 적으로 외부 범위 또는 전역 범위에서 함수를 명시 적으로 호출 할 수 있습니까? 스위프트의 기본 네임 스페이스, Swift와 전역 함수의 이름을 자격 예를 들어

이것은 C++ 범위 지정 해상도 연산자와 유사한 것, ::

+0

아, 당신은 C++의 전역 범위 지정 연산자'::'를 원하십니까? 재미있는 질문. – Yawar

+0

@ Yawar, 예, 정확하게. – Cezar

답변

25

Chris Lattner suggests. 따라서 Swift.sort을 사용하여 글로벌 버전에 액세스 할 수 있어야합니다.

+1

굉장! 고맙습니다. – Cezar

+1

아,하지만 스위프트에는 없지만 로컬 모듈에 있다면 어떨까요? –

+6

@AlexBrown 대상 이름이 "MyApp"인 경우 MyApp.theGlobalFunction()을 사용하여 전역 함수를 호출 할 수 있습니다. Alamofire의 글로벌 기능과 비슷한 충돌이있었습니다 (iOS7을 사용하면 임베디드 프레임 워크를 사용할 수 없으므로 lib는 이름 공간이 아닙니다). – MathieuLescure

0

랩 글로벌 sort,

func my_sort<T>(arr: T[], pred: (T, T) -> Bool) -> T[] { 
    return sort(arr, pred) 
} 
관련 문제