स्विफ्ट में न्यूलाइन के बिना प्रिंट


110

तेजी से 2.0 में, print()स्वचालित रूप से एक नया वर्ण जोड़ता है। स्विफ्ट 1.2 में, println()और print()अलग-अलग कार्य करता था। तो मैं कुछ टेक्स्ट कैसे प्रिंट करूं और उसमें कोई नईलाइन न जोड़ूं क्योंकि स्विफ्ट के बाद अब ऐसा कोई प्रिंट फंक्शन नहीं है जो नईलाइन्स को जोड़ न सके।



3
@ DANielNagy यह कोई डुप्लिकेट नहीं है क्योंकि स्विफ्ट 2.0 में एक प्रिंटलाइन फ़ंक्शन नहीं है। मैं यह नहीं पूछ रहा हूं कि कंसोल को कैसे प्रिंट किया जाए क्योंकि प्रिंट फ़ंक्शन ऐसा करेगा। मैं पूछ रहा हूँ "इनपुट टेक्स्ट में संलग्न नई लाइन के बिना कंसोल को कैसे प्रिंट करें"
अंकित गोयल

2
यह स्पष्ट रूप से Xcode 7 बीटा रिलीज़ नोटों में प्रलेखित है: "प्रिंटलाइन और प्रिंट को एक साथ एक प्रिंट फ़ंक्शन में एक डिफ़ॉल्ट तर्क के साथ विलय कर दिया गया है ..."
मार्टिन आर

जवाबों:


208

स्विफ्ट 2.0 में शुरू, न्यूलाइन के बिना मुद्रण की अनुशंसित विधि है:

print("Hello", terminator:"")

हालांकि आप केवल seperatorपैरामीटर के साथ इंटरफ़ेस देखते हैं । आप बस इसे अनदेखा कर सकते हैं क्योंकि इसका एक डिफ़ॉल्ट मूल्य हैfunc print(items: Any..., separator: String = default, terminator: String = default)
Binarian

2
स्विफ्ट डॉक्स में किसी को पता चलेगा कि defaultउसके बराबर क्या है?
7stud

1
@ 7stud defaultडिफ़ॉल्ट मान के लिए एक प्लेसहोल्डर है। आदर्श रूप से, प्रलेखन में वास्तविक मूल्य होना चाहिए, न कि प्लेसहोल्डर।
सुल्तान

1
डिफ़ॉल्ट मान हैं: विभाजक "" (एकल स्थान) और टर्मिनेटर \ n (नई पंक्ति)
selva

68

printस्विफ्ट के देर से संशोधन के बाद से फ़ंक्शन पूरी तरह से बदल गया है , अब यह बहुत सरल दिखता है और मानक कंसोल पर प्रिंट करने के लिए विधि के प्रकार हैं।

प्रिंट के लिए विधि हस्ताक्षर कुछ इस तरह दिखता है,

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

और यहाँ कुछ usecases हैं,

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

प्रिंटों:

Swift is awesome.
Swift is awesome
Swift is awesome.

श्रृंखलाबद्ध

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

प्रिंटों:

This is wild world

इसलिए, टर्मिनेटर का उपयोग करते हुए, आपको सावधान रहना चाहिए कि सामग्री एक ही पंक्ति के लिए प्रासंगिक हैं।

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)

प्रिंटों:

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

अब, lldb के साथ , आप po कमांड का उपयोग कर सकते हैं और यह ऑब्जेक्ट को lldb कंसोल में प्रिंट करेगा,

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

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

अब, प्रिंट टू स्ट्रीम का उपयोग करते हुए,

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

फाइल करने के लिए प्रिंट:

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

अब, लेडब डिबगर में, यदि आप कमांड पो का उपयोग करते हैं,

> po person

परिणाम कुछ इस तरह होगा,

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

इसके अलावा Xcode 7beta4 में मेरे लिए काम नहीं कर रहा। कॉलिंग print("foo", appendNewLine: false)संकलन लेकिन आउटपुट है (foo), falseऔर एक नई लाइन वैसे भी संलग्न है!
mluisbrown

@mluisbrown यह appendNewline(निचला मामला l) है
जेरेमीप

11

स्विफ्ट 2.0 में आप ऐसा कर सकते हैं:

मूल संस्करण

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

टर्मिनेटर का उपयोग करना

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

विभाजक का उपयोग करना

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

विभाजक और टर्मिनेटर का उपयोग करना

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

एक चर का उपयोग करना

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

दो चर का उपयोग करना

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

डिफ़ॉल्ट रूप से विभाजक एक स्थान है" "
जयराम कुमार

4

यदि आप लूप में एक ही लाइन चाहते हैं:

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

आउटपुट: 1 2 3 4

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.