Mantén la atención ya que en este tutorial encontrarás el hallazgo que buscas.Este tutorial fue analizado por nuestros expertos para asegurar la calidad y exactitud de nuestro contenido.
Solución:
Algunas diferencias:
-
print
vsprintln
:los
print
La función imprime mensajes en la consola Xcode al depurar aplicaciones.los
println
es una variación de esto que se eliminó en Swift 2 y ya no se usa. Si ve un código antiguo que está usandoprintln
, ahora puede reemplazarlo de manera segura conprint
.De vuelta en Swift 1.x,
print
no agregó caracteres de nueva línea al final del impreso string, mientras queprintln
hizo. Pero hoy en día,print
siempre agrega el carácter de nueva línea al final de la stringy, si no desea que lo haga, proporcione unterminator
parámetro de""
. -
NSLog
:-
NSLog
agrega una marca de tiempo y un identificador a la salida, mientras queprint
no; -
NSLog
Las declaraciones aparecen tanto en la consola del dispositivo como en la consola del depurador, mientras queprint
solo aparece en la consola del depurador. -
NSLog
en iOS 10-13 / macOS 10.12-10.x utilizaprintf
cadenas de formato de estilo, p. ej.NSLog("%0.4f", CGFloat.pi)
que producirá:
2017-06-09 11: 57: 55.642328-0700 MyApp[28937:1751492] 3.1416
-
NSLog
desde iOS 14 / macOS 11 puede usar string interpolación. (Entonces, nuevamente, en iOS 14 y macOS 11, generalmente preferiríamosLogger
sobreNSLog
. Vea el siguiente punto.)
Hoy en día, mientras
NSLog
aún funciona, generalmente usaríamos “registro unificado” (ver más abajo) en lugar deNSLog
. -
-
Efectivo iOS 14 / macOS 11, tenemos
Logger
interfaz con el sistema de “registro unificado”. Para una introducción aLogger
, consulte WWDC 2020 Explore el registro en Swift.-
Usar
Logger
, debes importaros
:import os
-
Igual que
NSLog
, el registro unificado generará mensajes tanto en la consola de depuración de Xcode como en la consola del dispositivo. -
Crear un
Logger
ylog
un mensaje para él:let logger = Logger(subsystem: Bundle.main.bundleIdentifier!, category: "network") logger.log("url = (url)")
Cuando observa la aplicación a través de la aplicación de consola externa, puede filtrar en función de la
subsystem
ycategory
. Es muy útil diferenciar sus mensajes de depuración de (a) aquellos generados por otros subsistemas en nombre de su aplicación, o (b) mensajes de otras categorías o tipos. -
Puede especificar diferentes tipos de mensajes de registro, ya sea
.info
,.debug
,.error
,.fault
,.critical
,.notice
,.trace
, etc .:logger.error("web service did not respond (error.localizedDescription)")
Por lo tanto, si usa la aplicación de consola externa, puede elegir ver solo los mensajes de ciertas categorías (por ejemplo, mostrar solo los mensajes de depuración si elige “Incluir mensajes de depuración” en el menú “Acción” de la consola). Estas configuraciones también dictan muchos detalles de problemas sutiles sobre si las cosas se registran en el disco o no. Vea el video de la WWDC para obtener más detalles.
-
De forma predeterminada, los datos no numéricos se redactan en los registros. En el ejemplo en el que registró la URL, si la aplicación se invocara desde el dispositivo y estuviera mirando desde la aplicación de la Consola macOS, vería lo siguiente en la Consola macOS:
url =
Si está seguro de que este mensaje no incluirá datos confidenciales del usuario y desea ver las cadenas en su consola macOS, tendrá que hacer lo siguiente:
os_log("url = (url, privacy: .public)")
-
-
Antes de iOS 14 / macOS 11, se introdujo iOS 10 / macOS 10.12
os_log
para la “tala unificada”. Para obtener una introducción al registro unificado en general, consulte el video Registro unificado y seguimiento de actividad de la WWDC 2016.-
Importar
os.log
:import os.log
-
Deberías definir el
subsystem
ycategory
:let log = OSLog(subsystem: Bundle.main.bundleIdentifier!, category: "network")
Cuando usas
os_log
, utilizaría un patrón de estilo printf en lugar de string interpolación:os_log("url = %@", log: log, url.absoluteString)
-
Puede especificar diferentes tipos de mensajes de registro, ya sea
.info
,.debug
,.error
,.fault
(o.default
):os_log("web service did not respond", type: .error)
-
No se puede utilizar string interpolación al usar
os_log
. Por ejemplo conprint
yLogger
tú haces:logger.log("url = (url)")
Pero con
os_log
, tendrías que hacer:os_log("url = %@", url.absoluteString)
-
los
os_log
impone la misma privacidad de datos, pero usted especifica la visibilidad pública en el formateador printf (p. ej.%public@
en vez de%@
). Por ejemplo, si quisiera verlo desde un dispositivo externo, tendría que hacer:os_log("url = %public@", url.absoluteString)
-
También puede usar el registro de “Puntos de interés” si desea ver rangos de actividades de Instruments:
let pointsOfInterest = OSLog(subsystem: Bundle.main.bundleIdentifier!, category: .pointsOfInterest)
Y comience un rango con:
os_signpost(.begin, log: pointsOfInterest, name: "Network request")
Y terminarlo con:
os_signpost(.end, log: pointsOfInterest, name: "Network request")
Para obtener más información, consulte https://stackoverflow.com/a/39416673/1271826.
-
Línea de fondo, print
es suficiente para un registro simple con Xcode, pero un registro unificado (ya sea Logger
o os_log
) logra lo mismo pero ofrece capacidades mucho mayores.
El poder del registro unificado se pone de manifiesto al depurar aplicaciones de iOS que deben probarse fuera de Xcode. Por ejemplo, cuando se prueban procesos de aplicaciones de iOS en segundo plano, como la búsqueda en segundo plano, estar conectado al depurador de Xcode cambia el ciclo de vida de la aplicación. Por lo tanto, con frecuencia querrá probar en un dispositivo físico, ejecutando la aplicación desde el propio dispositivo, no iniciando la aplicación desde el depurador de Xcode. El registro unificado le permite seguir viendo las declaraciones de registro de su dispositivo iOS desde la aplicación de consola macOS.
Si estas usando Swift 2, ahora solo puede usar print () para escribir algo en la salida.
Apple ha combinado ambos println () y impresión() funciones en uno.
Actualizado a iOS 9
Por defecto, la función termina la línea que imprime agregando un salto de línea.
print("Hello Swift")
Terminator
Para imprimir un valor sin un salto de línea después de él, pase un vacío string como el terminador
print("Hello Swift", terminator: "")
Separador
Ahora puede usar el separador para concatenar varios elementos
print("Hello", "Swift", 2, separator:" ")
Ambos
O puede combinar el uso de esta manera
print("Hello", "Swift", 2, separator:" ", terminator:".")
Además, Swift 2 tiene debugPrint()
(y CustomDebugStringConvertible
protocolo)!
No te olvides de debugPrint()
que funciona como print()
pero más adecuado para depuración.
Ejemplos:
- Instrumentos de cuerda
print("Hello World!")
se convierte enHello World
debugPrint("Hello World!")
se convierte en"Hello World"
(¡Citas!)
- Rangos
print(1..<6)
se convierte en1..<6
debugPrint(1..<6)
se convierte enRange(1..<6)
Cualquier clase puede personalizar su depuración string representación vía CustomDebugStringConvertible
protocolo.
Reseñas y valoraciones
Recuerda recomendar este artículo si te valió la pena.