1 post tagged

protocol

Расширения и протоколы

Представим себе ситуацию, вам нужно добавить метод смены цвета для стандартных классов вроде UIView, UIImageView. Поскольку UIImageView наследуется от UIView, то написав расширение для UIView, все обьекты типа UIImageView также получат новый функционал, но проблема в том, что цвет у обычной вью и картинки меняется разными способами, у UIView это backgroundColor, когда у UIImageView это tintColor. Решить проблему можно используя протокол:

protocol ColorCustomizable {
    func setColor()
}

extension UIView: ColorCustomizable {
    func setColor() {
        backgroundColor = UIColor.blackColor()
    }
}

Указывать протокол для UIImageView не нужно, он уже реализован в родительском классе UIView, осталось только переопределить метод:

extension UIImageView {
    override func setColor() {
        tintColor = UIColor.blackColor()
    }
}
2016   extension   protocol   Swift