Swift 3中的协议扩展

时间:2017-05-19 06:44:40

标签: ios swift swift-protocols swift-extensions

我希望默认属性为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 个答案:

答案 0 :(得分:3)

正如Martin R所说,你无法通过类扩展将存储的属性添加到类中。但您可以使用目标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)
        }
    }
}