一尘不染

选择全局或对象打印功能

swift

我正在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:无法使用。


阅读 230

收藏
2020-07-07

共1个答案

一尘不染

确实,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")
2020-07-07