我很好奇下一个代码是否会导致强大的参考周期?
enum Type {
case some(obj:Any)
}
class Entity {
var type:Type
init() {
type = Type.some(obj:self)
}
}
Run Code Online (Sandbox Code Playgroud) 我在另一个模块(使用pod)中声明了类扩展.
public extension UIView {
open func doStuff() {...}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试在当前项目模块中的子类中重写此方法时
class ConcreteView : UIView {
override open func doStuff() {...}
}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
覆盖其定义模块之外的非打开实例方法
尽管该方法实际上标记为开放
作为一种解决方法,我在同一模块中声明了另一个类,其中声明了扩展并在那里覆盖了所需的方法
public class CustomView: UIView {
override open func doStuff() {...}
}
Run Code Online (Sandbox Code Playgroud)
并在主模块中将此类设置为我的类的超类
class ConcreteView : CustomView
Run Code Online (Sandbox Code Playgroud)
所以只有在此之后我才能覆盖该方法.
它看起来真的像swift3中的一个错误,但也许我已经省略了为什么它以这种方式工作的一些理解?