Buscar..


Observaciones

println y debugPrintln eliminaron en Swift 2.0.

Fuentes:

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

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

Imprimir Debug

Debug Print muestra la representación de instancia más adecuada para la depuración.

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

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

print(dict)
debugPrint(dict)

Rendimientos

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

Esta información extra puede ser muy importante, por ejemplo:

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

print(wordArray)
debugPrint(wordArray)

Rendimientos

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

Observe cómo en la primera salida parece que hay 4 elementos en la matriz en lugar de 3. Por razones como esta, es preferible al depurar utilizar debugPrint

Actualización de una clase de depuración e impresión de valores.

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

tugurio

dump imprime el contenido de un objeto a través de la reflexión (reflejo).

Vista detallada de una matriz:

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

Huellas dactilares:

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

Para un diccionario:

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

Huellas dactilares:

▿ 3 pares clave / valor
▿ [0]: (2 elementos)
- .0: bar
- .1: 33
▿ [1]: (2 elementos)
- .0: baz
- .1: 42
▿ [2]: (2 elementos)
- .0: foo
- .1: 10

dump se declara como dump(_:name:indent:maxDepth:maxItems:) .

El primer parámetro no tiene etiqueta.

Hay otros parámetros disponibles, como name para establecer una etiqueta para el objeto que se está inspeccionando:

dump(attributes, name: "mirroring")

Huellas dactilares:

▿ reflejo: 3 pares clave / valor
▿ [0]: (2 elementos)
- .0: bar
- .1: 33
▿ [1]: (2 elementos)
- .0: baz
- .1: 42
▿ [2]: (2 elementos)
- .0: foo
- .1: 10

También puede optar por imprimir solo un cierto número de elementos con maxItems: para analizar el objeto hasta una cierta profundidad con maxDepth: y para cambiar la sangría de los objetos impresos con indent:

imprimir () vs dump ()

Muchos de nosotros empezamos a depurar con print() simple print() . Digamos que tenemos tal clase:

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

y tenemos una instancia de Abc como tal:

let abc = Abc()

Cuando ejecutamos la print() en la variable, la salida es

App.Abc

mientras dump() salida

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

Como se ve, dump() genera toda la jerarquía de clases, mientras que print() simplemente genera el nombre de la clase.

Por lo tanto, dump() es especialmente útil para la depuración de la interfaz de usuario

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

Con dump(view) obtenemos:

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

Mientras print(view) obtenemos:

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

Hay más información sobre la clase con dump() , por lo que es más útil para depurar la propia clase.

imprimir vs NSLog

En swift podemos usar las funciones print() y NSLog() para imprimir algo en la consola Xcode.

Pero hay muchas diferencias en print() funciones print() y NSLog() , tales como:

1 TimeStamp: NSLog() imprimirá la marca de tiempo junto con la cadena que le pasamos, pero print() no imprimirá la marca de tiempo.
p.ej

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

Salida:

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

También imprimirá ProjectName junto con la marca de tiempo.

2 Solo cadena: NSLog() solo toma cadena como entrada, pero print() puede imprimir cualquier tipo de entrada que se le pase.
p.ej

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 Rendimiento: la función NSLog() es muy lenta en comparación con print() función print() .

4 Sincronización: NSLog() maneja el uso simultáneo de un entorno de subprocesos múltiples e imprime la salida sin superponerse. Pero print() no manejará estos casos y confunde mientras realiza la publicación.

5 Consola del dispositivo: NSLog() genera salidas en la consola del dispositivo, podemos ver esta salida conectando nuestro dispositivo a Xcode. print() no imprimirá la salida en la consola del dispositivo.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow