Mor*_*lde 23 macos swift swift2
这很奇怪.我有一个简单的故事板占位符,GridView用于类名属性.
class GridView: NSView {
required init?(coder: NSCoder) {
super.init(coder: coder)
print("coder: \(coder)")
}
override func drawRect(dirtyRect: NSRect) {
let rect = NSBezierPath(rect: dirtyRect)
NSColor.redColor().setFill()
rect.fill()
}
}
Run Code Online (Sandbox Code Playgroud)
刚刚drawRect实现了这个功能,但是在我添加了初始化程序后,每次运行应用程序时都会打开打印对话框.

为什么会发生这种情况?如何为自定义视图正确重新实现故事板初始化器?
luk*_*302 21
呼叫print()做了不同的事情 - 更准确地说:正如你所期望的那样不同.它调用NSView的print(sender: AnyObject?),而不是记录打印.您可以将此视为一个错误或至少是非常意外的行为,因为Swift.print(...)通常使用得更多.
此操作方法将打开"打印"面板,如果用户选择取消以外的选项,则将接收器及其所有子视图打印到"打印"面板中指定的设备.
实际上它不是一个bug,因为print在当前上下文中调用"更接近"肯定是正确的方法.调用父母的print内容比调用其他任意内容更合理print.只有你通常使用其他打印的事实才是令人困惑的一点,因为一般来说你不必担心日志记录的范围print- 它只是起作用.如果你觉得周围的其他方法和将要使用的打印print你的父母,这将是一个很大较为混乱有明确说明您要使用的父母print,而不是Swift.print(...).
唯一的"解决方案"是为这两个函数使用不同的名称,这可能不会发生.