수색…


비고

printlndebugPrintln 은 Swift 2.0에서 제거되었습니다.

출처 :

https://developer.apple.com/library/content/technotes/tn2347/_index.html http://ericasadun.com/2015/05/22/swift-logging/

http://www.dotnetperls.com/print-swift

디버그 인쇄

디버그 인쇄는 디버깅에 가장 적합한 인스턴스 표현을 보여줍니다.

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

dumpdump(_: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() 디버깅을 시작합니다. 그런 수업이 있다고 가정 해 봅시다.

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() 는 출력을 장치의 콘솔로 출력하지 않습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow