hızlı bir şekilde satırsonu olmadan yazdır


110

Swift 2.0'da, print()otomatik olarak bir yeni satır karakteri ekler. Swift 1.2'de println()ve print()ayrı işlevler olarak kullanılıyordu. Öyleyse, swift'in artık satırsonu eklemeyen bir yazdırma işlevi olmadığı için bir metni nasıl yazdırabilirim ve ona yeni satır eklemeyebilirim.



3
@ DánielNagy Bu bir kopya değildir, çünkü swift 2.0'ın bir println işlevi yoktur. Konsola nasıl yazdırılacağını sormuyorum çünkü yazdırma işlevi bunu yapacak. "Metin girişine satırsonu eklenmeden konsola nasıl yazdırılır" diye soruyorum
Ankit Goel

2
Bu, Xcode 7 beta sürüm notlarında açıkça belgelenmiştir: "println ve print, varsayılan bir bağımsız değişkenle tek bir yazdırma işlevi olarak birleştirildi ..."
Martin R

Yanıtlar:


208

Swift 2.0'dan başlayarak, satırsonu olmadan yazdırmanın önerilen yöntemi şudur:

print("Hello", terminator:"")

Sadece seperatorparametrenin bulunduğu arayüzü görseniz bile . Varsayılan bir değere sahip olduğu için onu basitçe görmezden gelebilirsinizfunc print(items: Any..., separator: String = default, terminator: String = default)
Binarian

2
Swift belgelerinin neresinde birisi neyin defaulteşit olduğunu bulabilir ?
7

1
@ 7stud default, varsayılan bir değer için bir yer tutucudur. İdeal olarak, dokümantasyon bir yer tutucu değil gerçek değeri içermelidir.
Sulthan

1
Varsayılan değerler şunlardır: ayırıcı "" (tek boşluk) ve sonlandırıcı \ n (yeni satır)
selva

68

printSwift'in son revizyonundan bu yana işlev tamamen değişti , şimdi çok daha basit görünüyor ve standart konsola yazdırmak için çeşitli yöntemler var.

Baskı için yöntem imzası şuna benzer,

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

Ve işte bazı kullanım durumları:

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

Baskılar:

Swift is awesome.
Swift is awesome
Swift is awesome.

Birleştirilmesi

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

Baskılar:

This is wild world

Bu nedenle, sonlandırıcı kullanarak, içeriğin aynı satırla alakalı olmasına dikkat etmelisiniz.

CustomStringConvertible ile Nesne Yazdırma

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)

Baskılar:

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

Şimdi, lldb ile po komutunu kullanabilirsiniz ve bu, nesneyi lldb konsolunda bu şekilde yazdıracaktır,

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

TextOutputStream kullanarak dosyaya günlüğe kaydetme

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

Şimdi, yazdırmak için yazdırma özelliğini kullanarak

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

Dosyaya yazdırır:

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

Şimdi, lldb hata ayıklayıcıda, po komutunu kullanırsanız,

> po person

Sonuç böyle bir şey olurdu,

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

Ayrıca Xcode 7beta4'te benim için çalışmıyor. Çağırmak print("foo", appendNewLine: false)derler ama çıktı (foo), falseve yine de yeni bir satır eklenir!
mluisbrown

@mluisbrown it's appendNewline(küçük harf l)
JeremyP

11

Swift 2.0'da şunları yapabilirsiniz:

Temel versiyon

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

Sonlandırıcı kullanma

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

Ayırıcı kullanma

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

Ayırıcı ve sonlandırıcı kullanma

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

Tek değişken kullanmak

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

İki değişken kullanmak

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

Varsayılan olarak ayırıcı boşluktur" "
Jayram Kumar

4

Aynı hattın döngüde olmasını istiyorsanız:

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

Çıkış: 1 2 3 4

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.