2014-06-05 5 views
20

Il tipo Array in Swift ha una funzione membro chiamata sort, con la sua firma sort(isOrderedBefore: (T, T) -> Bool). Questa funzione è diversa dalla versione globale di sort, che ha la firma sort(array: T[], pred: (T, T) -> Bool).Chiamata a una funzione globale che ha lo stesso nome di una funzione membro

Se si estende un Array (vedi Why does the same method fail when inside an Array extension in Swift?), chiamando sort dall'interno del campo di applicazione della estensione Array risulta ovviamente nella versione locale in uso.

È possibile chiamare esplicitamente una funzione da un ambito esterno, o specificamente dall'ambito globale, anche se il suo nome coincide con quello di una funzione da un ambito interno?

Questo sarebbe simile al C++ operatore di risoluzione di scoping, ::

+0

Ah, intendi come l'operatore globale di scope C++ '::'? Domanda interessante – Yawar

+0

@Yawar, sì, esattamente. – Cezar

risposta

25

Chris Lattner suggests qualifica il nome della funzione globale con namespace di default di Swift, Swift. Quindi dovresti essere in grado di accedere alla versione globale usando: Swift.sort.

+1

Fantastico! Grazie. – Cezar

+1

ah, ma cosa succede se non è in Swift, ma nel modulo locale? –

+6

@AlexBrown se il nome di destinazione è "MyApp", è possibile chiamare la funzione globale con MyApp.theGlobalFunction(). Ho avuto un conflitto simile con le funzioni globali di Alamofire (per target iOS7 non è possibile utilizzare framework embedded e quindi lib non è namespace) – MathieuLescure

0

Wrap globale sort, per esempio,

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