选择全局或对象打印功能

时间:2015-06-20 15:46:37

标签: swift cocoa swift2

我正在使用Swift中的Cocoa项目并遇到以下问题:

Cocoa Framework中的几个类(例如NSWindowNSView)实现了一个名为print:的函数,该函数打开一个窗口以便打印某些东西(不知道是什么) ,所以当我在从这些类之一继承的类中工作,并希望将某些东西记录到控制台以进行调试时,我使用print:函数。但编译器认为我指的是self.print:,尽管我指的是全局打印功能。

我通过声明一个像这样的全局函数找到了一种解决方法:

func myPrint(o : Any?)
{
     print(o)
}

并且在编译器会混淆我所引用的函数的情况下使用myPrint:而不是print:。我非常确定在这种情况下可能还有其他函数print:。我的解决方法或覆盖继承的print:函数是唯一的解决方案,还是我可以给编译器一个提示,说我想引用全局print:函数?

PS:我使用的是Swift 2.0,因此无法使用println:

2 个答案:

答案 0 :(得分:9)

确实,NSView有一个

func print(_ sender: AnyObject?)

打开“打印”面板的方法,这是一个不幸的巧合。

您的myPrint()包装器有一些限制,例如

myPrint("b", appendNewline : false)

无法编译。更好的实施将是

func myPrint<T>(o : T, appendNewline nl: Bool = true) {
    print(o, appendNewline: nl)
}

但是你可以简单地在模块名称“Swift”前面明确地引用全局函数:

Swift.print("xxx")

答案 1 :(得分:3)

如果您的目标只是将输出写入控制台,我会在此处使用备用全局函数debugPrint(_:)