Ricerca…


Osservazioni

println e debugPrintln dove rimosso in Swift 2.0.

fonti:

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

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

Debug Print

Debug Print mostra la rappresentazione dell'istanza più adatta per il debug.

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

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

print(dict)
debugPrint(dict)

I rendimenti

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

Questa informazione extra può essere molto importante, ad esempio:

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

print(wordArray)
debugPrint(wordArray)

I rendimenti

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

Si noti come nel primo output ci siano 4 elementi nell'array rispetto a 3. Per ragioni come questa, è preferibile eseguire il debug per usare debugPrint

Aggiornamento di un debug di classi e stampa dei valori

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

cumulo di rifiuti

dump stampa il contenuto di un oggetto tramite riflessione (mirroring).

Vista dettagliata di un array:

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

stampe:

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

Per un dizionario:

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

stampe:

▿ 3 coppie chiave / valore
▿ [0]: (2 elementi)
- .0: bar
- .1: 33
▿ [1]: (2 elementi)
- .0: baz
- .1: 42
▿ [2]: (2 elementi)
- .0: pippo
- .1: 10

dump è dichiarato come dump(_:name:indent:maxDepth:maxItems:) .

Il primo parametro non ha etichetta.

Sono disponibili altri parametri, come il name per impostare un'etichetta per l'oggetto da ispezionare:

dump(attributes, name: "mirroring")

stampe:

▿ mirroring: 3 coppie chiave / valore
▿ [0]: (2 elementi)
- .0: bar
- .1: 33
▿ [1]: (2 elementi)
- .0: baz
- .1: 42
▿ [2]: (2 elementi)
- .0: pippo
- .1: 10

Puoi anche scegliere di stampare solo un determinato numero di elementi con maxItems: per analizzare l'oggetto fino a una certa profondità con maxDepth: e per modificare il rientro degli oggetti stampati con il indent:

Molti di noi iniziano il debugging con la semplice print() . Diciamo che abbiamo una classe simile:

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

e abbiamo un'istanza di Abc in questo modo:

let abc = Abc()

Quando eseguiamo print() sulla variabile, l'output è

App.Abc

mentre output dump()

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

Come visto, dump() restituisce l'intera gerarchia delle classi, mentre print() restituisce semplicemente il nome della classe.

Pertanto, dump() è particolarmente utile per il debug dell'interfaccia utente

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

Con dump(view) otteniamo:

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

Durante la print(view) otteniamo:

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

Ci sono più informazioni sulla classe con dump() , e quindi è più utile nel debug della classe stessa.

In swift possiamo usare entrambe print() funzioni print() e NSLog() per stampare qualcosa sulla console Xcode.

Ma ci sono molte differenze nelle funzioni print() e NSLog() , come ad esempio:

1 TimeStamp: NSLog() stamperà la data e l'ora con la stringa passata, ma print() non stamperà la data / ora.
per esempio

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

Produzione:

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

Stamperà anche ProjectName con timestamp.

2 Solo stringa: NSLog() accetta solo String come input, ma print() può stampare qualsiasi tipo di input passato ad esso.
per esempio

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 Prestazioni: la funzione NSLog() è molto lenta rispetto alla funzione print() .

4 Sincronizzazione: NSLog() gestisce l'utilizzo simultaneo dall'ambiente multi-threading e stampa l'output senza sovrapporlo. Ma print() non gestirà tali casi e non guasta mentre mostra l'output.

5 Console dispositivo: NSLog() output NSLog() sulla console del dispositivo, possiamo vedere questa uscita collegando il nostro dispositivo a Xcode. print() non stampa l'output sulla console del dispositivo.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow