扩展中的计算属性是否可以同时具有getter和setter? Apple的指南没有提到它,我见过的唯一例子只显示了扩展中的只读计算属性。
答案 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;扩展的扩展中的属性的一个示例。吸气剂。