cetak tanpa baris baru dengan cepat

110

Di swift 2.0, print()secara otomatis menambahkan karakter baris baru. Di cepat 1.2, println()dan print()dulunya adalah fungsi terpisah. Jadi bagaimana cara mencetak beberapa teks dan tidak menambahkan baris baru karena swift tidak lagi memiliki fungsi cetak yang tidak menambahkan baris baru.

Ankit Goel
sumber
3
@ DánielNagy Ini bukan duplikat karena swift 2.0 tidak memiliki fungsi println. Saya tidak menanyakan cara mencetak ke konsol karena fungsi cetak akan melakukannya. Saya bertanya "Bagaimana cara mencetak ke konsol tanpa baris baru ditambahkan ke teks masukan"
Ankit Goel
2
Ini secara eksplisit didokumentasikan dalam catatan rilis Xcode 7 beta: "println dan print telah digabungkan menjadi satu fungsi cetak dengan argumen default ..."
Martin R

Jawaban:

208

Mulai Swift 2.0, metode pencetakan tanpa baris baru yang disarankan adalah:

print("Hello", terminator:"")
cheniel
sumber
Padahal Anda hanya melihat antarmuka dengan seperatorparameter. Anda dapat mengabaikannya begitu saja karena memiliki nilai defaultfunc print(items: Any..., separator: String = default, terminator: String = default)
Binarian
2
Di mana dalam dokumen Swift seseorang bisa mengetahui apa defaultyang sama dengan?
7stud
1
@ 7stud defaultadalah placeholder untuk nilai default. Idealnya, dokumentasi harus berisi nilai sebenarnya, bukan placeholder.
Sulthan
1
Nilai defaultnya adalah: separator "" (spasi tunggal) dan terminator \ n (baris baru)
selva
68

printfungsi telah berubah total sejak revisi terakhir Swift , sekarang terlihat lebih sederhana dan ada varian metode untuk mencetak ke konsol standar.

Tanda tangan metode untuk cetakan terlihat seperti ini,

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

Dan berikut beberapa kasus penggunaan,

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

Cetakan:

Swift is awesome.
Swift is awesome
Swift is awesome.

Menggabungkan

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

Cetakan:

This is wild world

Jadi, dengan menggunakan terminator, Anda harus berhati-hati bahwa isinya relevan dengan baris yang sama.

Mencetak Objek dengan 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)

Cetakan:

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

Sekarang, dengan lldb , Anda dapat menggunakan perintah po dan itu akan mencetak objek seperti ini di konsol lldb,

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

Masuk ke file menggunakan 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)!)
  }
}

Sekarang, menggunakan print untuk streaming,

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

Cetakan ke file:

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

Sekarang, di debugger lldb, jika Anda menggunakan perintah po,

> po person

Hasilnya akan seperti ini,

<name: Jack, addresses: Tampere Helsinki  0x7feb82f26e80>
  - name : "Jack"
  ▿ address1 : Address
    - city : "Helsinki"
  ▿ address2 : Address
    - city : "Tampere"
Sandeep
sumber
Juga tidak berfungsi untuk saya di Xcode 7beta4. Memanggil print("foo", appendNewLine: false)kompilasi tetapi hasilnya tetap (foo), falsedan baris baru tetap ditambahkan!
mluisbrown
@mluisbrown itu appendNewline(huruf kecil l)
JeremyP
11

Di Swift 2.0 Anda dapat melakukan ini:

Versi dasar

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

Menggunakan terminator

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

Menggunakan separator

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

Menggunakan separator dan terminator

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

Menggunakan satu variabel

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

Menggunakan dua variabel

var hello = "Hello"
var world = "World"
print (hello, world)
result "Hello World\n"
Morten Gustafsson
sumber
Secara default, pemisahnya adalah spasi" "
Jayram Kumar
4

Jika Anda ingin baris yang sama dalam lingkaran:

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

Keluaran: 1 2 3 4

PVCS
sumber