选择全局或对象打印功能
Selecting global or object print function
我在 Swift 的一个 Cocoa 项目中工作,遇到了以下问题:
Cocoa 框架中的几个 classes(例如 NSWindow
或 NSView
)实现了一个名为 print:
的函数,它打开一个 window 为了打印一些东西(真的不知道是什么),所以当我在从其中一个 class 继承的 class 中工作时,并且想将一些东西记录到控制台以进行调试,我使用 print:
函数。但是编译器认为我指的是 self.print:
尽管我指的是全局打印函数。
我通过像这样声明一个全局函数找到了解决方法:
func myPrint(o : Any?)
{
print(o)
}
并在编译器混淆我指的是哪个函数的情况下使用 myPrint:
而不是 print:
。我很确定在这种情况下可能还有其他功能 print:
。我的解决方法或覆盖继承的 print:
函数是唯一的解决方案,还是我可以以某种方式给编译器一个提示,说我想引用全局 print:
函数?
PS:我使用的是 Swift 2.0,所以 println:
不可用。
的确,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")
如果您的目标只是将输出写入控制台,我会在这里使用备用全局函数 debugPrint(_:)
。
我在 Swift 的一个 Cocoa 项目中工作,遇到了以下问题:
Cocoa 框架中的几个 classes(例如 NSWindow
或 NSView
)实现了一个名为 print:
的函数,它打开一个 window 为了打印一些东西(真的不知道是什么),所以当我在从其中一个 class 继承的 class 中工作时,并且想将一些东西记录到控制台以进行调试,我使用 print:
函数。但是编译器认为我指的是 self.print:
尽管我指的是全局打印函数。
我通过像这样声明一个全局函数找到了解决方法:
func myPrint(o : Any?)
{
print(o)
}
并在编译器混淆我指的是哪个函数的情况下使用 myPrint:
而不是 print:
。我很确定在这种情况下可能还有其他功能 print:
。我的解决方法或覆盖继承的 print:
函数是唯一的解决方案,还是我可以以某种方式给编译器一个提示,说我想引用全局 print:
函数?
PS:我使用的是 Swift 2.0,所以 println:
不可用。
的确,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")
如果您的目标只是将输出写入控制台,我会在这里使用备用全局函数 debugPrint(_:)
。