Swift Language
Logowanie do Swift
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/
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:
print () vs dump ()
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.
print vs NSLog
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.