Recherche…


Remarques

println et debugPrintln supprimés dans Swift 2.0.

Sources:

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 affiche la représentation d'instance la plus appropriée pour le débogage.

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

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

print(dict)
debugPrint(dict)

Les rendements

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

Ces informations supplémentaires peuvent être très importantes, par exemple:

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

print(wordArray)
debugPrint(wordArray)

Les rendements

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

Notez que dans la première sortie, il semble qu'il y ait 4 éléments dans le tableau, contre 3. Pour des raisons comme celles-ci, il est préférable, lors du débogage, d'utiliser debugPrint

Mise à jour des valeurs de débogage et d'impression des classes

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

déverser

dump imprime le contenu d'un objet par réflexion (mise en miroir).

Vue détaillée d'un tableau:

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

Impressions:

▿ 4 éléments
- [0]: Joe
- [1]: Jane
- [2]: Jim
- [3]: Joyce

Pour un dictionnaire:

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

Impressions:

Pairs 3 paires clé / valeur
▿ [0]: (2 éléments)
- .0: bar
- 0,1: 33
▿ [1]: (2 éléments)
- .0: baz
- .1: 42
▿ [2]: (2 éléments)
- .0: foo
- .1: 10

dump est déclaré comme dump(_:name:indent:maxDepth:maxItems:) .

Le premier paramètre n'a pas d'étiquette.

Il y a d'autres paramètres disponibles, comme name pour définir une étiquette pour l'objet inspecté:

dump(attributes, name: "mirroring")

Impressions:

▿ miroir: 3 paires clé / valeur
▿ [0]: (2 éléments)
- .0: bar
- 0,1: 33
▿ [1]: (2 éléments)
- .0: baz
- .1: 42
▿ [2]: (2 éléments)
- .0: foo
- .1: 10

Vous pouvez également choisir d'imprimer uniquement un certain nombre d'éléments avec maxItems: pour analyser l'objet jusqu'à une certaine profondeur avec maxDepth: et pour modifier l'indentation des objets imprimés avec un indent: maxDepth:

Beaucoup d'entre nous commencent à déboguer avec print() . Disons que nous avons une telle classe:

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

et nous avons une instance de Abc comme ça:

let abc = Abc()

Lorsque nous exécutons print() sur la variable, la sortie est

App.Abc

pendant que dump() sort

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

Comme on l'a vu, dump() affiche toute la hiérarchie de classe, tandis que print() génère simplement le nom de la classe.

Par conséquent, dump() est particulièrement utile pour le débogage de l'interface utilisateur.

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

Avec dump(view) nous obtenons:

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

Pendant l' print(view) nous obtenons:

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

Il y a plus d'informations sur la classe avec dump() , et c'est donc plus utile pour déboguer la classe elle-même.

imprimer vs NSLog

En swift, nous pouvons utiliser les fonctions print() et NSLog() pour imprimer quelque chose sur la console Xcode.

Mais il y a beaucoup de différences dans les fonctions print() et NSLog() , telles que:

1 TimeStamp: NSLog() imprimera l'horodatage avec la chaîne que nous lui avons transmise, mais print() n'imprimera pas d'horodatage.
par exemple

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

Sortie:

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

Il va également imprimer ProjectName avec l'horodatage.

2 Uniquement en chaîne: NSLog() prend uniquement la chaîne en tant qu'entrée, mais print() peut imprimer tout type d'entrée qui lui est transmis.
par exemple

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: la fonction NSLog() est très lente comparée à la fonction print() .

4 Synchronisation: NSLog() gère l'utilisation simultanée de l'environnement multi-threading et imprime la sortie sans la chevaucher. Mais print() ne traitera pas de tels cas et de tels problèmes lors de la diffusion des résultats.

5 Device Console: les sorties NSLog() sur la console du périphérique également, nous pouvons voir cette sortie en connectant notre appareil à Xcode. print() n'imprimera pas la sortie sur la console du périphérique.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow