web-dev-qa-db-de.com

Drucken ohne Zeilenvorschub in swift

In Swift 2.0, print() fügt automatisch ein Zeilenumbruchzeichen hinzu. In Swift 1.2, println() und print() war früher eine separate Funktion, also wie drucke ich Text und füge keine neue Zeile hinzu, da Swift keine Druckfunktion mehr hat, die keine neuen Zeilen hinzufügt.

93
Ankit Goel

Ab Swift 2.0 lautet die empfohlene Methode zum Drucken ohne Zeilenumbruch:

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

Die Funktion print hat sich seit der späten Überarbeitung von Swift vollständig geändert. Sie sieht jetzt viel einfacher aus und es gibt verschiedene Methoden zum Drucken auf der Standardkonsole.

Die Methodensignatur für den Druck sieht ungefähr so ​​aus:

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

Und hier sind einige Anwendungsfälle:

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

Drucke:

Swift is awesome.
Swift is awesome
Swift is awesome.

Verketten

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

Drucke:

This is wild world

Bei Verwendung des Terminators sollten Sie also darauf achten, dass der Inhalt für dieselbe Zeile relevant ist.

Druckobjekt mit 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)

Drucke:

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

Jetzt können Sie mit lldb den Befehl po verwenden und das Objekt wie folgt in der lldb-Konsole ausgeben.

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

Protokollierung in eine Datei mit 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)!)
  }
}

Verwenden Sie jetzt print to stream,

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

Drucke in Datei:

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

Wenn Sie nun im lldb-Debugger den Befehl po verwenden,

> po person

Ergebnis wäre so etwas,

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

In Swift 2.0 können Sie dies tun:

Basisversion

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

Terminator verwenden

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

mit Trennzeichen

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

Verwenden von Trennzeichen und Abschlusszeichen

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

mit einer Variablen

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

Mit zwei Variablen

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

Wenn Sie die gleiche Line-In-Schleife wünschen:

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

Ausgabe: 1 2 3 4

4
PVCS