swift - programming - imprimir sem nova linha rapidamente



swift version (3)

No swift 2.0, print() adiciona automaticamente um caractere de nova linha. No swift 1.2, println() e print() costumavam ser funções separadas. Então, como imprimo algum texto e não adiciono uma nova linha a ele, porque o swift não tem mais uma função de impressão que não acrescenta novas linhas.

https://src-bin.com


Answer #1

A partir do Swift 2.0, o método recomendado de impressão sem nova linha é:

print("Hello", terminator:"")

Answer #2

No Swift 2.0, você pode fazer isso:

Versão 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 e terminador

print("Hello", "World", separator:" ", terminator:"")
result "Hello World"

Usando uma variável

var helloworld = "Hello World"
print(helloworld)
result "Hello World\n"

Usando duas variáveis

var hello = "Hello"
var world = "World"
print (hello, world)
result "Hello World\n"

Answer #3

print função de print mudou completamente desde a última revisão do Swift , agora parece muito mais simples e há uma variante do método para imprimir no console padrão.

A assinatura do método para impressão se parece com isso,

public func print<Target>(_ items: Any..., separator: String = default, terminator: String = default, to output: inout Target) where Target : TextOutputStream

E aqui estão alguns casos de uso,

print("Swift is awesome.")
print("Swift", "is", "awesome", separator:" ")
print("Swift", "is", "awesome", separator:" ", terminator:".")

Impressões:

Swift is awesome.
Swift is awesome
Swift is awesome.

Concatenando

print("This is wild", terminator: " ")
print("world")

Impressões:

This is wild world

Portanto, usando o terminator, você deve ter cuidado para que o conteúdo seja relevante para a mesma linha.

Objeto de impressão com 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)

Impressões:

<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)
  }
}

Agora, com o lldb , você pode usar o comando po e ele imprimirá o objeto como este no console do lldb,

<name: Jack, addresses: Helsinki,Tampere 0x60c000044860>

Registrando no Arquivo 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)!)
  }
}

Agora, usando imprimir para transmitir,

print("First of all", to: &myStream )
print("Then after", to: &myStream)
print("And, finally", to: &myStream)

Imprime em arquivo:

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]])
  }
}

Agora, no depurador lldb, se você usar o comando po,

> po person

O resultado seria algo como isto,

<name: Jack, addresses: Tampere Helsinki  0x7feb82f26e80>
  - name : "Jack"
  ▿ address1 : Address
    - city : "Helsinki"
  ▿ address2 : Address
    - city : "Tampere"




swift2