web-dev-qa-db-fra.com

imprimer sans nouvelle ligne dans swift

Dans Swift 2.0, print() ajoute automatiquement un caractère de nouvelle ligne. Dans Swift 1.2, println() et print() étaient des fonctions séparées. Alors, comment puis-je imprimer du texte sans y ajouter de nouvelle ligne car Swift ne dispose plus d'une fonction d'impression qui n'ajoute pas de nouvelle ligne.

93
Ankit Goel

À partir de Swift 2.0, la méthode recommandée pour imprimer sans nouvelle ligne est la suivante:

print("Hello", terminator:"")
174
cheniel

La fonction print a complètement changé depuis la dernière révision de Swift, elle semble maintenant beaucoup plus simple et il existe une variante de méthode pour imprimer sur une console standard.

La signature de la méthode pour imprimer ressemble à ceci,

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

Et voici quelques cas d'utilisation,

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

Impressions:

Swift is awesome.
Swift is awesome
Swift is awesome.

concaténation

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

Impressions:

This is wild world

Donc, en utilisant terminator, vous devez faire attention à ce que le contenu soit pertinent pour la même ligne.

Objet d'impression avec 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)

Impressions:

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

Maintenant, avec lldb, vous pouvez utiliser la commande po et cela affichera un objet comme ceci dans la console lldb,

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

Connexion au fichier en utilisant 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)!)
  }
}

Maintenant, en utilisant print pour diffuser,

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

Imprimer dans le fichier:

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

Maintenant, dans le débogueur lldb, si vous utilisez la commande po,

> po person

Le résultat serait quelque chose comme ça,

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

Dans Swift 2.0, vous pouvez faire ceci:

version de base

print("Hello World")
result "Hello World\n"

tilisation du terminateur

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

en utilisant un séparateur

print("Hello", "World", separator:" ")
result "Hello World\n"

en utilisant séparateur et terminateur

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

tilisation d'une variable

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

en utilisant deux variables

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

Si vous voulez la même ligne en boucle:

for i in 1...4
{
    print("", i, separator: " ", terminator:"")
}
print()

Sortie: 1 2 3 4

4
PVCS