2016-08-18 96 views
3

是否可以扩展Swift函数的功能?我想在程序中的每个print()函数上添加一个字符,而无需创建全新的函数并重命名print()的每个实例。是否可以创建一个扩展,将每个打印实例附加一个'*'?Swift:扩展print()函数的功能

这样做的目的是创建一种方法来清除XCODE添加到调试器中的所有额外信息。我正在使用print语句来检查代码的不同部分的进度和成功,但XCODE在几秒钟内填充了数千行多余的信息,很快就会掩盖我的特定语句。

我想要做什么:

print("Hello world!") 
//Sudo code: 
Extension print(text: String) { 
    let newText = "*\(text)" 
    return newText 
} 

输出: *的Hello World!

然后,我将过滤Xcode调试输出的星号。我一直在做这个手工

+2

如果这是在Xcode中,您是否尝试过在调试窗口而不是“All Output?”中切换到“Target Output”? –

回答

7

您可以覆盖从标准库中的print方法:

public func print(items: Any..., separator: String = " ", terminator: String = "\n") { 
    let output = items.map { "*\($0)" }.joinWithSeparator(separator) 
    Swift.print(output, terminator: terminator) 
} 

因为它是在标准库,它的模块名称为Swift.

+1

这是“压倒一切”吗?我认为这只是“阴影” – Alexander

+0

我在哪里可以放置此功能,以便它在所有文件中都可用?有没有一种方法可以使用这个函数,而无需在'print(items:“Hello”)中添加'items:'' –

+0

制作一个新的'.swift'文件并将其放置在那里。如果你使用的是Swift 2,你不必指定'item:'标签。无论如何,该代码将不适用于Swift 3。 –

4

这段代码在为我工作swift 3

import Foundation 

public func print(_ items: Any..., separator: String = " ", terminator: String = "\n") { 
    let output = items.map { "\($0)" }.joined(separator: separator) 
    Swift.print(output, terminator: terminator) 
} 

class YourViewController: UIViewController { 
}