Swift Language
Loggar in Swift
Sök…
Anmärkningar
println
och debugPrintln
var tas bort i Swift 2.0.
källor:
https://developer.apple.com/library/content/technotes/tn2347/_index.html http://ericasadun.com/2015/05/22/swift-logging/
Debug Print
Debug Print visar den instansrepresentation som är bäst lämpad för felsökning.
print("Hello")
debugPrint("Hello")
let dict = ["foo": 1, "bar": 2]
print(dict)
debugPrint(dict)
utbyten
>>> Hello
>>> "Hello"
>>> [foo: 1, bar: 2]
>>> ["foo": 1, "bar": 2]
Denna extra information kan vara mycket viktig, till exempel:
let wordArray = ["foo", "bar", "food, bars"]
print(wordArray)
debugPrint(wordArray)
utbyten
>>> [foo, bar, food, bars]
>>> ["foo", "bar", "food, bars"]
Lägg märke till hur i den första utgången det verkar som om det finns fyra element i matrisen i motsats till 3. Av skäl som detta är det att föredra att vid felsökning använda debugPrint
Uppdatering av klasser felsöker och skriver ut värden
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
dumpa
dump
skriver ut innehållet i ett objekt via reflektion (spegling).
Detaljerad vy över en matris:
let names = ["Joe", "Jane", "Jim", "Joyce"]
dump(names)
Grafik:
▿ 4 element
- [0]: Joe
- [1]: Jane
- [2]: Jim
- [3]: Joyce
För en ordlista:
let attributes = ["foo": 10, "bar": 33, "baz": 42]
dump(attributes)
Grafik:
▿ 3 nyckel- / värdepar
▿ [0]: (2 element)
- .0: bar
- .1: 33
▿ [1]: (2 element)
- .0: baz
- .1: 42
▿ [2]: (2 element)
- .0: foo
- .1: 10
dump
deklareras som dump(_:name:indent:maxDepth:maxItems:)
.
Den första parametern har ingen etikett.
Det finns andra parametrar tillgängliga, som name
att ställa in en etikett för objektet som ska inspekteras:
dump(attributes, name: "mirroring")
Grafik:
▿ spegling: 3 nyckel- / värdepar
▿ [0]: (2 element)
- .0: bar
- .1: 33
▿ [1]: (2 element)
- .0: baz
- .1: 42
▿ [2]: (2 element)
- .0: foo
- .1: 10
Du kan också välja att bara skriva ut ett visst antal objekt med maxItems:
att para objektet upp till ett visst djup med maxDepth:
och att ändra indraget för tryckta objekt med indent:
print () vs dump ()
Många av oss börjar felsöka med enkelt print()
. Låt oss säga att vi har en sådan klass:
class Abc {
let a = "aa"
let b = "bb"
}
och vi har en förekomst av Abc
som så:
let abc = Abc()
När vi kör print()
på variabeln är utskriften
App.Abc
medan dump()
utgångar
App.Abc #0
- a: "aa"
- b: "bb"
Som sett matar dump()
ut hela klasshierarkin, medan print()
matar ut klassnamnet.
Därför är dump()
särskilt användbart för UI-felsökning
let view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
Med dump(view)
vi:
- <UIView: 0x108a0cde0; frame = (0 0; 100 100); layer = <CALayer: 0x159340cb0>> #0
- super: UIResponder
- NSObject
När vi print(view)
vi:
<UIView: 0x108a0cde0; frame = (0 0; 100 100); layer = <CALayer: 0x159340cb0>>
Det finns mer information om klassen med dump()
, så det är mer användbart vid felsökning av klassen själv.
tryck vs NSLog
I snabb kan vi använda både print()
och NSLog()
funktioner för att skriva ut något på Xcode-konsolen.
Men det finns många skillnader i print()
och NSLog()
-funktioner, till exempel:
1 TimeStamp: NSLog()
kommer att skriva ut tidsstämpel tillsammans med strängen vi skickade till den, men print()
kommer inte att skriva ut tidsstämpel.
t.ex
let array = [1, 2, 3, 4, 5]
print(array)
NSLog(array.description)
Produktion:
[1, 2, 3, 4, 5]
2017-05-31 13: 14: 38.582 ProjetName [2286: 7473287] [1, 2, 3, 4, 5]
Det kommer också att skriva ut ProjectName tillsammans med tidsstämpel.
2 Only String: NSLog()
tar bara String som en ingång, men print()
kan skriva ut alla typer av inmatningar som skickas till den.
t.ex
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 Performance: NSLog()
funktion är mycket långsam jämfört med print()
funktion.
4 Synkronisering: NSLog()
hanterar samtidig användning från miljö med flera gängor och skriver ut utan att överlappa den. Men print()
kommer inte att hantera sådana fall och virvlar när du praterar utdata.
5 NSLog()
: NSLog()
-utgångar på enhetskonsolen, vi kan se denna utgång genom att ansluta vår enhet till Xcode. print()
skriver inte ut på enhetens konsol.