Swift Language
Entrar en Swift
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/
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.