2016-08-18 99 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 { 
}