Szukaj…


Uwagi

println i debugPrintln println debugPrintln usunięte w Swift 2.0.

Źródła:

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

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

Wydruk debugowania

Wydruk debugowania pokazuje reprezentację instancji, która jest najbardziej odpowiednia do debugowania.

print("Hello")
debugPrint("Hello")

let dict = ["foo": 1, "bar": 2]

print(dict)
debugPrint(dict)

Wydajność

>>> Hello
>>> "Hello"
>>> [foo: 1, bar: 2]
>>> ["foo": 1, "bar": 2]

Te dodatkowe informacje mogą być bardzo ważne, na przykład:

let wordArray = ["foo", "bar", "food, bars"]

print(wordArray)
debugPrint(wordArray)

Wydajność

>>> [foo, bar, food, bars]
>>> ["foo", "bar", "food, bars"]

Zauważ, jak w pierwszym wyjściu wydaje się, że w tablicy są 4 elementy w przeciwieństwie do 3. Z takich powodów lepiej jest podczas debugowania użyć debugPrint

Aktualizacja debugowania klas i wartości drukowania

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

wysypisko

dump drukuje zawartość obiektu poprzez odbicie (odbicie lustrzane).

Szczegółowy widok tablicy:

let names = ["Joe", "Jane", "Jim", "Joyce"]
dump(names)

Wydruki:

▿ 4 elementy
- [0]: Joe
- [1]: Jane
- [2]: Jim
- [3]: Joyce

W przypadku słownika:

let attributes = ["foo": 10, "bar": 33, "baz": 42]
dump(attributes)

Wydruki:

▿ 3 pary klucz / wartość
▿ [0]: (2 elementy)
- .0: bar
- .1: 33
▿ [1]: (2 elementy)
- .0: baz
- .1: 42
▿ [2]: (2 elementy)
- .0: foo
- .1: 10

dump jest zadeklarowany jako dump(_:name:indent:maxDepth:maxItems:) .

Pierwszy parametr nie ma etykiety.

Dostępne są inne parametry, takie jak name aby ustawić etykietę kontrolowanego obiektu:

dump(attributes, name: "mirroring")

Wydruki:

▿ dublowanie: 3 pary klucz / wartość
▿ [0]: (2 elementy)
- .0: bar
- .1: 33
▿ [1]: (2 elementy)
- .0: baz
- .1: 42
▿ [2]: (2 elementy)
- .0: foo
- .1: 10

Możesz także wydrukować tylko określoną liczbę elementów za pomocą maxItems: aby maxItems: obiekt do określonej głębokości za pomocą maxDepth: i zmienić wcięcie drukowanych obiektów za pomocą indent: maxDepth:

Wielu z nas zaczyna debugowanie za pomocą zwykłego print() . Powiedzmy, że mamy taką klasę:

class Abc {
    let a = "aa"
    let b = "bb"
}

i mamy instancję Abc jako taką:

let abc = Abc()

Kiedy uruchamiamy print() na zmiennej, wynikiem jest

App.Abc

podczas gdy dump() wyprowadza

App.Abc #0
- a: "aa"
- b: "bb"

Jak widać, dump() generuje całą hierarchię klas, podczas gdy print() po prostu wyświetla nazwę klasy.

Dlatego dump() jest szczególnie przydatny do debugowania interfejsu użytkownika

let view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))

Dzięki dump(view) otrzymujemy:

 - <UIView: 0x108a0cde0; frame = (0 0; 100 100); layer = <CALayer: 0x159340cb0>> #0
    - super: UIResponder
      - NSObject 

Podczas print(view) otrzymujemy:

<UIView: 0x108a0cde0; frame = (0 0; 100 100); layer = <CALayer: 0x159340cb0>>

Jest więcej informacji o klasie za pomocą dump() , więc jest to bardziej przydatne w debugowaniu samej klasy.

W trybie szybkim możemy użyć funkcji print() i NSLog() do wydrukowania czegoś na konsoli Xcode.

Istnieje jednak wiele różnic w NSLog() print() i NSLog() , takich jak:

1 TimeStamp: NSLog() wypisze znacznik czasu wraz z przekazanym mu łańcuchem, ale print() nie wydrukuje znacznika czasu.
na przykład

let array = [1, 2, 3, 4, 5]
print(array)
NSLog(array.description)

Wynik:

[1, 2, 3, 4, 5]
2017-05-31 13: 14: 38.582 ProjetName [2286: 7473287] [1, 2, 3, 4, 5]

Wydrukuje także ProjectName wraz ze znacznikiem czasu.

2 Tylko String: NSLog() przyjmuje tylko String jako dane wejściowe, ale print() może wydrukować dowolny typ danych wejściowych do niego przekazanych.
na przykład

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'

3 Wydajność: NSLog() działa bardzo wolno w porównaniu z funkcją print() .

4 Synchronizacja: NSLog() obsługuje jednoczesne korzystanie ze środowiska wielowątkowego i drukuje dane wyjściowe bez nakładania się. Ale print() nie poradzi sobie z takimi przypadkami i pomieszaniem podczas sprawdzania wyników.

5 Konsola urządzenia: NSLog() wyjściowe NSLog() na konsoli urządzenia również możemy zobaczyć, podłączając nasze urządzenie do Xcode. print() nie drukuje danych wyjściowych na konsoli urządzenia.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow