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

Changing the initial value of a var in another module

我正在使用这个模块来显示图像: 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)
}

那行不通,它在顶层初始化器上给我一个错误,说我没有覆盖指定的初始化器。感觉我无法覆盖它,因为它不像第二个那样 public。正确吗?

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

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

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

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

是的,您不能覆盖 variable/function,因为它是 internal。这就是访问修饰符的意义所在。

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

转到 pod 文件并解锁文件(编辑时会提示这样做),然后更改

var maxScaleFromMinScale: CGFloat = 3.0

public var maxScaleFromMinScale: CGFloat = 3.0