Swift Language
신속한 로그인
수색…
비고
println
및 debugPrintln
은 Swift 2.0에서 제거되었습니다.
출처 :
https://developer.apple.com/library/content/technotes/tn2347/_index.html http://ericasadun.com/2015/05/22/swift-logging/
디버그 인쇄
디버그 인쇄는 디버깅에 가장 적합한 인스턴스 표현을 보여줍니다.
print("Hello")
debugPrint("Hello")
let dict = ["foo": 1, "bar": 2]
print(dict)
debugPrint(dict)
수확량
>>> Hello
>>> "Hello"
>>> [foo: 1, bar: 2]
>>> ["foo": 1, "bar": 2]
이 추가 정보는 매우 중요 할 수 있습니다. 예를 들면 다음과 같습니다.
let wordArray = ["foo", "bar", "food, bars"]
print(wordArray)
debugPrint(wordArray)
수확량
>>> [foo, bar, food, bars]
>>> ["foo", "bar", "food, bars"]
첫 번째 출력에서 배열에 3과 반대로 4 개의 요소가있는 것을 확인하십시오. 이와 같은 이유로 디버깅 할 때 debugPrint
를 사용하는 것이 debugPrint
클래스 디버그 및 인쇄 값 업데이트
struct Foo: Printable, DebugPrintable {
var description: String {return "Clear description of the object"}
var debugDescription: String {return "Helpful message for debugging"}
}
var foo = Foo()
print(foo)
debugPrint(foo)
>>> Clear description of the object
>>> Helpful message for debugging
덤프
dump
는 반사 (미러링)를 통해 객체의 내용을 인쇄합니다.
배열의 상세보기 :
let names = ["Joe", "Jane", "Jim", "Joyce"]
dump(names)
인쇄물:
▿ 4 원소
- [0] : 조
- [1] : Jane
- [2] : 짐
- [3] : 조이스
사전의 경우 :
let attributes = ["foo": 10, "bar": 33, "baz": 42]
dump(attributes)
인쇄물:
▿ 3 개의 키 / 값 쌍
▿ [0] : (2 요소)
- .0 : 막대
- .1 : 33
▿ [1] : (2 요소)
- .0 : baz
- .1 : 42
▿ [2] : (2 요소)
- .0 : foo
- .1 : 10
dump
는 dump(_:name:indent:maxDepth:maxItems:)
로 선언됩니다.
첫 번째 매개 변수에는 레이블이 없습니다.
검사 할 객체에 대한 레이블을 설정하는 name
과 같은 다른 매개 변수를 사용할 수 있습니다.
dump(attributes, name: "mirroring")
인쇄물:
미러링 : 3 개의 키 / 값 쌍
▿ [0] : (2 요소)
- .0 : 막대
- .1 : 33
▿ [1] : (2 요소)
- .0 : baz
- .1 : 42
▿ [2] : (2 요소)
- .0 : foo
- .1 : 10
당신은 또한있는 항목의 특정 번호를 인쇄하도록 선택할 수 있습니다 maxItems:
와 특정 깊이로 개체를 구문 분석 maxDepth:
및 인쇄 개체의 들여 쓰기를 변경하려면 indent:
.
print () vs dump ()
많은 사람들이 간단한 print()
디버깅을 시작합니다. 그런 수업이 있다고 가정 해 봅시다.
class Abc {
let a = "aa"
let b = "bb"
}
우리는 Abc
의 인스턴스를 다음과 같이 가지고 있습니다.
let abc = Abc()
변수에 대해 print()
를 실행하면 출력은 다음과 같습니다.
App.Abc
while dump()
출력
App.Abc #0
- a: "aa"
- b: "bb"
위에서 보듯이 dump()
는 전체 클래스 계층 구조를 출력하지만 print()
단순히 클래스 이름을 출력합니다.
따라서 dump()
는 UI 디버깅에 특히 유용합니다.
let view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
dump(view)
를 사용하면 다음과 같은 결과를 얻습니다.
- <UIView: 0x108a0cde0; frame = (0 0; 100 100); layer = <CALayer: 0x159340cb0>> #0
- super: UIResponder
- NSObject
우리가 얻는 print(view)
:
<UIView: 0x108a0cde0; frame = (0 0; 100 100); layer = <CALayer: 0x159340cb0>>
dump()
있는 클래스에 대한 자세한 정보가 있으므로 클래스 자체의 디버깅에 더 유용합니다.
인쇄 대 NSLog
신속하게 print()
NSLog()
함수와 NSLog()
함수를 모두 사용하여 Xcode 콘솔에 무언가를 인쇄 할 수 있습니다.
그러나 print()
와 NSLog()
함수에는 다음과 같은 많은 차이점이 print()
.
1 TimeStamp : NSLog()
는 전달 된 문자열과 함께 타임 스탬프를 print()
하지만 print()
는 타임 스탬프를 인쇄하지 않습니다.
예
let array = [1, 2, 3, 4, 5]
print(array)
NSLog(array.description)
산출:
[1, 2, 3, 4, 5]
2017-05-31 13 : 14 : 38.582 ProjetName [2286 : 7473287] [1, 2, 3, 4, 5]
또한 타임 스탬프와 함께 ProjectName 을 인쇄합니다.
2 String 만 : NSLog()
는 String을 입력으로 사용하지만 print()
는 전달 된 모든 유형의 입력을 인쇄 할 수 있습니다.
예
let array = [1, 2, 3, 4, 5]
print(array) //prints [1, 2, 3, 4, 5]
NSLog(array) //error: Cannot convert value of type [Int] to expected argument type 'String'
성능 : NSLog()
함수는 print()
함수에 비해 매우 느립니다 .
4 동기화 : NSLog()
는 멀티 스레딩 환경에서 동시 사용을 처리하고 출력을 겹치지 않고 출력합니다. 그러나 print()
는 출력을 prating하는 동안 이러한 경우를 처리하지 않고 뒤죽박죽입니다.
5 장치 콘솔 : 장치 콘솔의 NSLog()
출력 또한 장치를 Xcode에 연결하여이 출력을 볼 수 있습니다. print()
는 출력을 장치의 콘솔로 출력하지 않습니다.