Подтвердить что ты не робот

Функции расширения префикса

В Swift это необязательно для префиксных классов, поскольку их модуль действует как пространство имен.

Как насчет префикса функций расширения? Например:

extension UIImage {

    public func hnk_hasAlpha() -> Bool { ... }

}

С одной стороны, Swift не является динамическим, поэтому столкновения будут генерировать ошибки компилятора.

Но что произойдет, если скомпилированный код запускается в будущей версии iOS/OS X, в которой добавлен один из моих методов расширения? Могут ли методы в разных модулях считаться разными символами, даже если они имеют одну и ту же подпись?

Разве это имеет значение, если расширенный класс является подклассом NSObject или чистым классом Swift?

4b9b3361

Ответ 1

Здесь есть некоторые тонкости:

расширения типов Objective-C реализуются как категории Objective-C, и все это подразумевает.

расширения типов Swift, однако, действуют только там, где они видны из-за импорта. Это означает, что вы случайно не можете топать по частному системному методу (будь то сейчас или одному в будущем), и если система вводит открытый метод с тем же именем, что и ваш, вы получите отказ во время компиляции вы перестраиваете, но ваше существующее приложение не сломается.