Функции расширения префикса
В Swift это необязательно для префиксных классов, поскольку их модуль действует как пространство имен.
Как насчет префикса функций расширения? Например:
extension UIImage {
public func hnk_hasAlpha() -> Bool { ... }
}
С одной стороны, Swift не является динамическим, поэтому столкновения будут генерировать ошибки компилятора.
Но что произойдет, если скомпилированный код запускается в будущей версии iOS/OS X, в которой добавлен один из моих методов расширения? Могут ли методы в разных модулях считаться разными символами, даже если они имеют одну и ту же подпись?
Разве это имеет значение, если расширенный класс является подклассом NSObject или чистым классом Swift?
Ответы
Ответ 1
Здесь есть некоторые тонкости:
расширения типов Objective-C реализуются как категории Objective-C, и все это подразумевает.
расширения типов Swift, однако, действуют только там, где они видны из-за импорта. Это означает, что вы случайно не можете топать по частному системному методу (будь то сейчас или одному в будущем), и если система вводит открытый метод с тем же именем, что и ваш, вы получите отказ во время компиляции вы перестраиваете, но ваше существующее приложение не сломается.