Ответ 1
Крис Латтнер предлагает присвоить имя глобальной функции пространству имен по умолчанию Swift, Swift
. Таким образом, вы должны иметь доступ к глобальной версии, используя: Swift.sort
.
Тип Array
в Swift имеет функцию-член, называемую sort
, причем ее подпись sort(isOrderedBefore: (T, T) -> Bool)
. Эта функция отличается от глобальной версии sort
, которая имеет подпись sort(array: T[], pred: (T, T) -> Bool)
.
Если один расширяет Array
(см. Почему тот же самый метод выходит из строя, когда внутри расширения Array в Swift?), вызывая sort
изнутри области расширения Array
, естественно, приведет к использованию локальной версии.
Можно ли явно вызывать функцию из внешней области или, в частности, из глобальной области, даже если ее имя совпадает с именем функции из внутренней области?
Это будет похоже на оператор разрешающей способности С++, ::
Крис Латтнер предлагает присвоить имя глобальной функции пространству имен по умолчанию Swift, Swift
. Таким образом, вы должны иметь доступ к глобальной версии, используя: Swift.sort
.
Оберните глобальный sort
, например,
func my_sort<T>(arr: T[], pred: (T, T) -> Bool) -> T[] {
return sort(arr, pred)
}