Расширение протокола в Свифт 3

Я хочу иметь свойство по умолчанию UIImageView, который был бы isFlipped, Я могу сделать это путем подклассов UIImageView и добавление одного свойства isFlipped, Но я хочу использовать пользовательский протокол и расширения для этого, но через некоторое время происходит сбой. Ниже мой код. Как я могу использовать это правильно? Спасибо

import Foundation
import UIKit

protocol FlipImage {
    var isFlipped: Bool { get set }
}

extension UIImageView:FlipImage{
    var isFlipped: Bool {
        get {
            return  self.isFlipped
        }
        set {
            self.isFlipped = newValue
        }
    }
}

1 ответ

Решение

Как сказал Мартин Р., вы не можете добавлять сохраненные свойства в класс через расширения класса. Но вы можете использовать объект C, связанный с объектом, чтобы сделать это через расширение

private var key: Void?

extension UIImageView {
    public var isFlipped: Bool? {
        get {
            return objc_getAssociatedObject(self, &key) as? Bool
        }

        set {
            objc_setAssociatedObject(self,
                                     &key, newValue,
                                     .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
        }
    }
}
Другие вопросы по тегам