본문 바로가기

프로그래밍/SWIFT

[SWIFT] dump() 함수 출력을 문자열로 바꾸는 방법

반응형

dump 함수는 클래스 인스턴스의 내부 속성까지 간단히 출력해 주기 때문에 디버깅시에 편리하다. 그런데, 출력 내용을 문자열로 저장하여, stdout, stderr 가 아닌 곳으로도 출력/저장하고 싶었다.

스택오버플로우에 간단한 답변이 있었다.

https://stackoverflow.com/a/42094841/100093

let myClass = MyClass()
var myClassDumped = String()
dump(myClass, to: &myClassDumped)

https://github.com/apple/swift/blob/master/stdlib/public/core/OutputStream.swift

위 링크를 인용하고 있는데, 직접 영문설명을 읽어보는 게 좋겠지만, 요약하면, print(_:to:) 와 dump(_:to:) 함수에는 to 인자를 줄 수 있고, 여기에는 TextOutputStream 프로토콜을 따르는 객체가 올 수 있고, String 은 해당 프로토콜을 잘 따르는 클래스라는 것. 그래서 to 의 인자로 줄 수 있다는 것.

유의할 것은 인자로 줄 때 & 를 주어 카피로 넘겨주는 것이 아니라 레퍼런스를 넘겨야 하고, 변경이 가능해야 하기 때문에 var 로 선언해야 한다는 점.

728x90