2014-06-05 101 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自然會導致本地版本。

即使它的名稱與內部作用域中函數的名稱一致,是否可以從外部作用域或特別是全局作用域顯式調用一個函數?

這將是類似於C++作用域解析運算符,::

+0

啊,你是說像C++的全局範圍操作符運算符'::'?有趣的問題。 – Yawar

+0

@Yawar,是的,正好。 – Cezar

回答

25

Chris Lattner suggests資格與斯威夫特的默認命名空間,Swift全局函數的名稱。因此,您應該可以使用以下鏈接訪問全球版本:Swift.sort

+1

太棒了!謝謝。 – Cezar

+1

啊,但如果它不在Swift中,但在本地模塊中呢? –

+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) 
} 
相關問題