是否可以在扩展中使用非只读计算属性?

时间:2015-11-21 14:29:46

标签: swift swift-extensions computed-properties

扩展中的计算属性是否可以同时具有getter和setter? Apple的指南没有提到它,我见过的唯一例子只显示了扩展中的只读计算属性。

2 个答案:

答案 0 :(得分:1)

这有效:

imageView

所以

答案 1 :(得分:1)

  

扩展中的计算属性是否可能具有getter和setter?

根据我的经验,扩展中计算属性的最常见用途之一可能是提供一个包装器,以便更轻松地访问特定属性。

例如,当我们想要修改UIKit之外的任何边框图层,边框颜色或角半径时,我们就会遇到layer属性。

但我们可以将UIView扩展为包含setter和amp;属性的属性。 getter提供了一种更方便的方法来更改其图层的属性:

extension UIView {
    var borderColor: UIColor? {
        get {
            guard let color = self.layer.borderColor else {
                return nil
            }
            return UIColor(CGColor: color)
        }
        set {
            self.layer.borderColor = newValue?.CGColor
        }
    }
}

此外,如果我们真的想要,我们可以利用Objective-C运行时来模拟扩展中存储的属性(这当然意味着设置和获取)。以this Stack Overflow answer为例:

private var kAssociationKeyNextField: UInt8 = 0

extension UITextField {
    @IBOutlet var nextField: UITextField? {
        get {
            return objc_getAssociatedObject(self, &kAssociationKeyNextField) as? UITextField
        }
        set(newField) {
            objc_setAssociatedObject(self, &kAssociationKeyNextField, newField, .OBJC_ASSOCIATION_RETAIN)
        }
    }
}

这仅仅是具有setter& amp;扩展的扩展中的属性的一个示例。吸气剂。