swift - libro - imprimir sin nueva línea en rápido
fahrenheit 451 ray bradbury (4)
En swift 2.0,
print()
agrega automáticamente un carácter de nueva línea.
En swift 1.2,
println()
e
print()
solían ser funciones separadas.
Entonces, ¿cómo imprimo un texto y no le agrego una nueva línea, ya que swift ya no tiene una función de impresión que no agregue nuevas líneas.
A partir de Swift 2.0, el método recomendado para imprimir sin nueva línea es:
print("Hello", terminator:"")
En Swift 2.0 puedes hacer esto:
Versión básica
print("Hello World")
result "Hello World/n"
Usando terminador
print("Hello World", terminator:"")
result "Hello World"
Usando separador
print("Hello", "World", separator:" ")
result "Hello World/n"
Usando separador y terminador
print("Hello", "World", separator:" ", terminator:"")
result "Hello World"
Usando una variable
var helloworld = "Hello World"
print(helloworld)
result "Hello World/n"
Usando dos variables
var hello = "Hello"
var world = "World"
print (hello, world)
result "Hello World/n"
Si desea la misma línea en bucle:
for i in 1...4
{
print("", i, separator: " ", terminator:"")
}
print()
Salida: 1 2 3 4
print
función de
print
ha cambiado completamente desde la revisión tardía de
Swift
, ahora parece mucho más simple y hay una variante de método para imprimir en la consola estándar.
La firma del método para imprimir se ve más o menos así,
public func print<Target>(_ items: Any..., separator: String = default, terminator: String = default, to output: inout Target) where Target : TextOutputStream
Y aquí hay algunos casos de uso,
print("Swift is awesome.")
print("Swift", "is", "awesome", separator:" ")
print("Swift", "is", "awesome", separator:" ", terminator:".")
Huellas dactilares:
Swift is awesome.
Swift is awesome
Swift is awesome.
Concatenando
print("This is wild", terminator: " ")
print("world")
Huellas dactilares:
This is wild world
Por lo tanto, al usar el terminador, debe tener cuidado de que el contenido sea relevante para la misma línea.
Imprimir objeto con CustomStringConvertible
struct Address {
let city: String
}
class Person {
let name = "Jack"
let addresses = [
Address(city: "Helsinki"),
Address(city: "Tampere")
]
}
extension Person: CustomStringConvertible {
var description: String {
let objectAddress = unsafeBitCast(self, to: Int.self)
return String(format: "<name: /(name) %p>", objectAddress)
}
}
let jack = Person()
print(jack)
Huellas dactilares:
<name: Jack 0x608000041c20>
CustomDebugStringConvertible
extension Person: CustomDebugStringConvertible {
var debugDescription: String {
let objectAddress = unsafeBitCast(self, to: Int.self)
let addressString = addresses.map { $0.city }.joined(separator: ",")
return String(format: "<name: /(name), addresses: /(addressString) %p>",objectAddress)
}
}
Ahora, con lldb , puede usar el comando po e imprimirá un objeto como este en la consola lldb,
<name: Jack, addresses: Helsinki,Tampere 0x60c000044860>
Iniciar sesión en el archivo usando TextOutputStream
struct MyStreamer: TextOutputStream {
lazy var fileHandle: FileHandle? = {
let fileHandle = FileHandle(forWritingAtPath: self.logPath)
return fileHandle
}()
var logPath: String = "My file path"
mutating func write(_ string: String) {
fileHandle?.seekToEndOfFile()
fileHandle?.write(string.data(using:.utf8)!)
}
}
Ahora, usando print para transmitir,
print("First of all", to: &myStream )
print("Then after", to: &myStream)
print("And, finally", to: &myStream)
Impresiones para archivar:
First of all
Then after
And finally
CustomReflectable
extension Person: CustomReflectable {
var customMirror: Mirror {
return Mirror(self, children: ["name": name, "address1": addresses[0], "address2": addresses[1]])
}
}
Ahora, en el depurador lldb, si usa el comando po,
> po person
El resultado sería algo como esto,
▿ <name: Jack, addresses: Tampere Helsinki 0x7feb82f26e80>
- name : "Jack"
▿ address1 : Address
- city : "Helsinki"
▿ address2 : Address
- city : "Tampere"