Swift 3 中的协议扩展

Protocol extension in Swift 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
        }
    }
}

正如 Martin R 所说,您不能通过 class 扩展将存储的属性添加到 class。但是您可以使用 objective 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)
        }
    }
}