默认情况下,扩展不能具有存储属性。但是,如果您真的需要它,您可以通过objc运行时创建它
private var associationKey: UInt8 = 111 // Some constant
extension ViewController {
var colorChanged: Bool {
get {
return objc_getAssociatedObject(self, &associationKey) as! Bool
}
set {
objc_setAssociatedObject(self, &associationKey, newValue, .OBJC_ASSOCIATION_ASSIGN)
}
}
}
protocol ColorChangable {
var colorChange: Bool { get set }
}
extension ColorChangable where Self: UIViewController {
func setMyTouchableView {
// Your logic
}
}
class ViewController: UIViewController {
var colorChange: Bool
func viewDidLoad() {
self.viewDidLoad()
setMyTouchableView()
}
}
extension ViewController: ColorChangable {}