请考虑以下事项。
fileprivate extension UIButton {
override open var isSelected: Bool {
didSet {
self.titleLabel?.font = isSelected ? UIFont(name: "HelveticaNeue-Medium", size: 14) : UIFont(name: "HelveticaNeue-Light", size: 14)
}
}
}
过了一会儿,xcode中出现一条警告,要求我将“open”更改为fileprivate。当然,如果我这样做,那么我不会覆盖UIButton中的相同isSelected
变量,而是出现错误。
这是一个XCode错误吗?我无法将扩展程序设置为公共扩展程序或内部扩展程序,因为该行为将更改应用程序中的所有UIButtons
。
有什么想法吗?
更新
答案 0 :(得分:3)
有趣的是,Swift实际上可以让你这样做。我认为你无法在私有(fileprivate)上下文中覆盖公共方法。
你真正想要的是模棱两可的:
在您的情况下,您将覆盖上下文中的方法,该方法仅限于文件本身。有人可能会认为覆盖仅适用于此文件中的按钮,但事实并非如此。现在,应用程序中的每个按钮实际上都有重写方法(已经过测试)。因此,您的解决方案绝对是在公开的扩展中覆盖此方法。
注意:我知道它是属性而不是方法,但在幕后这是一个在调用对象的setter后触发的方法。