在NSView内部调用`print`会打开打印对话框
这是奇怪的。我有一个简单的故事板占位符,其GridView
为类名称属性。在NSView内部调用`print`会打开打印对话框
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()
}
}
这个工作与刚刚drawRect
实现预期,但之后我加入了初始化器就开始我每次运行应用程序时打开打印对话框。
为什么会出现这种情况,我该如何正确地重新实现自定义视图故事板初始化器?
回答:
调用print()
做了一些不同的事情 - 更确切地说:如你所期望的那样。它调用NSView
's print(sender: AnyObject?)
而不是记录打印。你可以认为这是一个错误,或者至少是一个意想不到的行为,因为Swift.print(...)
通常更多使用。
此操作方法打开“打印”面板,如果用户选择除取消之外的选项,则将接收器及其所有子视图打印到“打印”面板中指定的设备。
看看this post in the apple dev forum。
事实上,它不是一个错误,因为调用print
在当前上下文中“更接近”当然是正确的方法。调用父母的print
比调用一些任意的其他print
更合理。只有通常使用其他打印的事实是令人困惑的地方,因为一般来说,您不必担心日志记录print
所处的范围 - 它只是起作用。如果你想另一种方式,并想要使用父母的打印print
这将是一个lot更混乱,必须明确说明您要使用父母print
而不是Swift.print(...)
。
唯一的“解决方案”将使用不同名称的两个功能,这可能不会发生。
回答:
它调用打印对话框的原因是Swift 2显然有两个方法具有相同的签名。
回答:
这是一个很老的线程,但我必须在这里,你可以这样写:
Swift.print("something")
,你会使用“记录打印”功能,而不是观点的一个。
以上是 在NSView内部调用`print`会打开打印对话框 的全部内容, 来源链接: utcz.com/qa/262738.html