2016-08-18 3 views
3

Swift 함수의 기능을 확장 할 수 있습니까? 새로운 기능을 만들고 print()의 모든 인스턴스 이름을 바꾸지 않고도 프로그램의 모든 print() 함수에 단일 문자를 appnd하고 싶습니다. 모든 인쇄 인스턴스에 '*'를 추가하는 확장을 만들 수 있습니까?Swift : print() 함수의 확장 기능

이 목적은 XCODE가 디버거에 추가하는 모든 추가 정보를 비우는 방법을 만드는 것입니다. 나는 코드의 다른 부분의 진행과 성공을 확인하기 위해 print 문을 사용하고 있지만 XCODE는 수천 줄의 초과 정보를 몇 초 만에 채워 내 특정 문장을 빠르게 덮어 쓴다.

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

출력 : * 안녕하세요을 내가 원하는 무엇

!

그러면 Xcode 디버깅 출력을 별표로 필터링합니다. 이 표준 라이브러리에 이래로

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

, 그 모듈 이름이 Swift.

+2

이것이 Xcode에 있다면 "모든 출력"대신 "대상 출력"으로 전환 해 보았습니까? –

답변

7

당신은 표준 라이브러리에서 print 메소드를 오버라이드 (override) 할 수 있습니다이를하고있다 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 { 
} 
+1

"우선 적용"하시겠습니까? 난 그냥 "그림자"라고 생각합니다 – Alexander

+0

어디서 모든 파일에서 사용할 수 있도록이 기능을 배치 할 수 있습니까? 그리고'print (items : "Hello")'와 같이'items :'를 추가하지 않고이 함수를 사용하는 방법이있다. –

+0

새로운'.swift' 파일을 만들어 거기에 놓는다. Swift 2를 사용하는 경우'item :'레이블을 지정할 필요가 없습니다. 코드는 Swift 3에서 작동하지 않습니다. –

4

나를 위해 작동이 코드입니다 : 내가 수동으로