在swift

时间:2017-01-18 16:03:01

标签: ios swift xcode uibutton

请考虑以下事项。

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。 有什么想法吗?

更新

确切的警告是这样的。 enter image description here

1 个答案:

答案 0 :(得分:3)

有趣的是,Swift实际上可以让你这样做。我认为你无法在私有(fileprivate)上下文中覆盖公共方法。

你真正想要的是模棱两可的:

在您的情况下,您将覆盖上下文中的方法,该方法仅限于文件本身。有人可能会认为覆盖仅适用于此文件中的按钮,但事实并非如此。现在,应用程序中的每个按钮实际上都有重写方法(已经过测试)。因此,您的解决方案绝对是在公开的扩展中覆盖此方法。

注意:我知道它是属性而不是方法,但在幕后这是一个在调用对象的setter后触发的方法。