在另一个模块中更改var的初始值

时间:2016-06-23 08:51:22

标签: swift module override var initializer

我正在使用此模块显示图像: https://github.com/huynguyencong/ImageScrollView/blob/master/Sources/ImageScrollView.swift

我已经使用CocoaPods将它添加到我的项目中,我想更改var“maxScaleFromMinScale”的值。我只是想弄清楚如何。

首先,我尝试覆盖不可能的var。

然后我尝试通过复制和覆盖模块创建者覆盖的相同内容来覆盖初始化器。

override init(frame: CGRect) {
    super.init(frame: frame)
}

required public init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

这不起作用,它给我一个顶级初始化程序的错误,说我没有覆盖指定的初始化程序。感觉我无法覆盖它,因为它不像第二个那样公开。正确的吗?

我尝试的最后一件事是进行扩展:

extension ImageScrollView {
    public func setMaxScale(scale: CGFloat) {
        maxScaleFromMinScale = scale
    }
}

这也不起作用,maxScaleFromMinScale是一个未解析的标识符。这似乎也是因为它是一个内部变量而我无法访问它(另一个模块)。这是否意味着我的ONLY选项是复制整个文件并修改源代码。希望有一个简单而优雅的解决方案。

如果是这种情况,为什么你可以覆盖内置的UIKit元素,而不是我使用CocoaPods下载的那个元素。

2 个答案:

答案 0 :(得分:1)

是的,您无法覆盖变量/函数,因为它是internal。这是访问修饰符的重点。

某些UIKit函数为public,因此您可以覆盖它们。

答案 1 :(得分:-1)

转到pod文件并解锁文件(提示在编辑时执行此操作),然后更改

var maxScaleFromMinScale: CGFloat = 3.0

public var maxScaleFromMinScale: CGFloat = 3.0