2014-06-05 5 views
20

Swift'de Array10 yazısının adlı bir üyesi vardır ve imzası sort(isOrderedBefore: (T, T) -> Bool)'dir. Bu işlev, sort(array: T[], pred: (T, T) -> Bool) imzasına sahip olan sort'un global sürümünden farklıdır.Üye işleviyle aynı ada sahip global bir işlevi çağırma

bir Array (Why does the same method fail when inside an Array extension in Swift? bakınız), Array uzantının kapsamı içinden sort çağrı doğal olarak yerel versiyonu ile sonuçlanacak, kullanılan uzanıyorsa.

Bir işlev, bir iç kapsamdan bir işlevle çakışsa bile, bir dış kapsamdan veya özellikle de genel kapsamdan bir işlevi açıkça çağırmak mümkün mü? Swift'in varsayılan ad, Swift ile küresel fonksiyonun adını eleme örneğin

Bu C++ kapsam çözünürlük operatöre benzer olacak, ::

+0

Ah, C++ 'nın global kapsam belirleme operatörü '::'? İlginç soru. – Yawar

+0

@Yawar, evet, tam olarak. – Cezar

cevap

25

Chris Lattner suggests. Bu yüzden global versiyona Swift.sort kullanarak erişebilmelisiniz.

+1

Harika! Teşekkür ederim. – Cezar

+1

ah, ama Swift'de değil, yerel modülde ne olur? –

+6

@AlexBrown Hedef adınız "Uygulamam" ise, MyApp.theGlobalFunction() ile global işlevi çağırabilirsiniz. Alamofire'in global işlevleriyle benzer bir çatışmam oldu (iOS7'yi hedeflemek için gömülü çerçeveleri kullanamazsınız ve bu nedenle lib isimsiz değil) – MathieuLescure

0

Wrap küresel sort,

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