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

Представим себе ситуацию, вам нужно добавить метод смены цвета для стандартных классов вроде 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()
    }
}
Share
Send
2016   extension   protocol   Swift
Your comment
won’t be published

HTML will not work

Ctrl + Enter
Popular